/* ========================================================================== Mein Kochbuch - Digital & A4 Print Layout Theme Farben & Typografie inspiriert vom Design-Prototyp ========================================================================== */ @import url('https://fonts.googleapis.com/css2?family=Architects+Daughter&family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap'); :root { --creme: #FAF6F0; --tannengruen: #1E4D3B; --tannengruen-light: rgba(30, 77, 59, 0.12); --altrosa: #D29B9B; --altrosa-light: rgba(210, 155, 155, 0.2); --schwarz: #222222; --grau-bg: #e6e2dc; --border-hand: 2px solid var(--schwarz); --font-hand: 'Architects Daughter', cursive, sans-serif; --font-sans: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; --radius-recipe: 14px; } /* Base Body for Cookbook view */ .cookbook-body { margin: 0; padding: 0; background-color: var(--grau-bg); font-family: var(--font-sans); color: var(--schwarz); min-height: 100vh; display: flex; flex-direction: column; } @media screen { html { overflow-x: clip; } .cookbook-body { overflow-x: clip; width: 100%; } } /* Cookbook Navigation Bar (Fest / Sticky beim Scrollen) */ .cb-nav { position: sticky; top: 0; z-index: 1000; background: var(--tannengruen); color: var(--creme); padding: 6px 14px; min-height: 48px; box-shadow: 0 4px 15px rgba(0,0,0,0.25); display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; box-sizing: border-box; } .cb-nav-brand { display: flex; align-items: center; gap: 8px; text-decoration: none; color: var(--creme); flex-shrink: 0; } .cb-brand-icon { font-size: 1.5rem; line-height: 1; } .cb-nav-title { font-family: var(--font-hand); font-size: 1.35rem; letter-spacing: 0.02em; margin: 0; white-space: nowrap; } .cb-nav-actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; } .cb-btn { font-family: var(--font-hand); font-size: 1rem; font-weight: 700; padding: 8px 14px; border-radius: 8px; border: 2px solid transparent; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 6px; transition: all 0.2s ease; } /* 100% einheitliche Navigationsleisten-Buttons */ .cb-nav-btn { background: var(--creme); color: var(--tannengruen); border: 2px solid var(--creme); border-radius: 8px; font-family: var(--font-hand); font-weight: 700; font-size: 0.98rem; padding: 6px 14px; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; justify-content: center; gap: 6px; transition: all 0.18s ease; box-shadow: 2px 2px 0px rgba(0, 0, 0, 0.15); white-space: nowrap; line-height: 1.2; } .cb-nav-btn:hover { background: #ffffff; border-color: #ffffff; color: var(--tannengruen); transform: translateY(-1px); box-shadow: 2px 3px 0px rgba(0, 0, 0, 0.25); } .cb-nav-btn:active { transform: translateY(0); box-shadow: 1px 1px 0px rgba(0, 0, 0, 0.15); } .cb-btn-creme { background: var(--creme); color: var(--tannengruen); border-color: var(--creme); } .cb-btn-creme:hover { background: #fff; transform: translateY(-1px); } .cb-btn-outline { background: transparent; color: var(--creme); border-color: var(--creme); } .cb-btn-outline:hover { background: rgba(250, 246, 240, 0.18); border-color: #ffffff; color: #ffffff; } .cb-btn-green { background: #143729; color: var(--creme) !important; border-color: var(--creme); box-shadow: none; } .cb-btn-green:hover { background: #0f2c1f; color: #ffffff !important; border-color: #ffffff; transform: translateY(-1px); } /* Filter Bar: Schlank & horizontal scrollbar (links-rechts) */ .cb-filter-bar { position: sticky; top: 48px; z-index: 990; background: var(--creme); border-bottom: 2px solid rgba(34, 34, 34, 0.15); padding: 6px 12px; display: flex; align-items: center; overflow-x: auto; white-space: nowrap; scrollbar-width: thin; -webkit-overflow-scrolling: touch; width: 100%; box-sizing: border-box; box-shadow: 0 2px 6px rgba(0,0,0,0.06); } .cb-filter-scroll-container { display: flex; align-items: center; gap: 8px; flex-wrap: nowrap; width: max-content; padding: 2px 4px; } .cb-chip { flex-shrink: 0; white-space: nowrap; font-family: var(--font-hand); font-size: 0.9rem; padding: 5px 13px; border-radius: 20px; background: var(--grau-bg); border: 1.5px solid rgba(34, 34, 34, 0.2); color: var(--schwarz); cursor: pointer; text-decoration: none; transition: all 0.2s; display: inline-flex; align-items: center; } .cb-chip.active, .cb-chip:hover { background: var(--tannengruen); color: var(--creme); border-color: var(--tannengruen); } /* Page Container (Virtual Book / Scroll view) */ .book-wrapper { max-width: 960px; width: 100%; margin: 24px auto; padding: 0 16px; display: flex; flex-direction: column; gap: 36px; box-sizing: border-box; } /* --- A4 Page Container --- */ .page { background-color: var(--creme); box-shadow: 0 6px 20px rgba(0,0,0,0.18); position: relative; overflow: hidden; box-sizing: border-box; border-radius: 6px; min-height: 580px; } /* ========================================================================== A4 Print Engine (Android Chrome, iOS Safari, Desktop) ========================================================================== */ @page { size: A4 portrait; margin: 0; } @media print { * { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; color-adjust: exact !important; box-sizing: border-box !important; } html, body.cookbook-body { width: 210mm !important; min-width: 210mm !important; max-width: 210mm !important; height: auto !important; min-height: 297mm !important; margin: 0 !important; padding: 0 !important; background-color: var(--creme) !important; color: var(--schwarz) !important; display: block !important; overflow: visible !important; float: none !important; } .cb-nav, .cb-filter-bar, .no-print, .no-print *, .empty-chapter-section, .empty-chapter-section *, .empty-chapter-box, .empty-chapter-box * { display: none !important; visibility: hidden !important; height: 0 !important; min-height: 0 !important; max-height: 0 !important; margin: 0 !important; padding: 0 !important; border: none !important; page-break-before: avoid !important; page-break-after: avoid !important; break-before: avoid !important; break-after: avoid !important; overflow: hidden !important; } .book-wrapper { display: block !important; width: 210mm !important; max-width: 210mm !important; min-width: 210mm !important; margin: 0 !important; padding: 0 !important; gap: 0 !important; float: none !important; } /* Basis für JEDE A4-Seite im Druck: Exakt 1 Seite ohne Überlauf */ .page { width: 210mm !important; max-width: 210mm !important; min-width: 210mm !important; height: 297mm !important; min-height: 297mm !important; max-height: 297mm !important; margin: 0 !important; padding: 0 !important; background-color: var(--creme) !important; position: relative !important; box-sizing: border-box !important; box-shadow: none !important; border-radius: 0 !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; overflow: hidden !important; } .page:last-child { page-break-after: auto !important; break-after: auto !important; } /* 1. COVER IM DRUCK */ .cover { width: 210mm !important; max-width: 210mm !important; min-width: 210mm !important; height: 297mm !important; min-height: 297mm !important; max-height: 297mm !important; box-sizing: border-box !important; padding: 30mm 15mm !important; display: flex !important; justify-content: center !important; align-items: center !important; background-color: var(--creme) !important; background-image: url("data:image/svg+xml,%3Csvg preserveAspectRatio='none' viewBox='0 0 200 800' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M 5 0 Q 15 200 0 400 T 10 800 L 20 800 Q 10 600 25 400 T 15 0 Z' fill='%231E4D3B' opacity='0.9'/%3E%3Cpath d='M 35 0 Q 25 250 40 500 T 30 800 L 55 800 Q 65 500 45 250 T 50 0 Z' fill='%231E4D3B' opacity='0.85'/%3E%3Cpath d='M 70 0 Q 80 300 65 600 T 75 800 L 85 800 Q 75 500 90 300 T 80 0 Z' fill='%231E4D3B' opacity='0.9'/%3E%3Cpath d='M 105 0 Q 95 200 110 400 T 100 800 L 125 800 Q 135 600 120 400 T 125 0 Z' fill='%231E4D3B' opacity='0.8'/%3E%3Cpath d='M 140 0 Q 150 250 135 500 T 145 800 L 155 800 Q 145 500 160 250 T 150 0 Z' fill='%231E4D3B' opacity='0.9'/%3E%3Cpath d='M 175 0 Q 165 300 180 600 T 170 800 L 195 800 Q 205 500 185 300 T 190 0 Z' fill='%231E4D3B' opacity='0.85'/%3E%3C/svg%3E") !important; background-size: 100% 100% !important; background-position: 0 0 !important; background-repeat: no-repeat !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; overflow: hidden !important; } .cover-box { border: 3.5px solid var(--schwarz) !important; background-color: var(--creme) !important; box-shadow: none !important; transform: rotate(-1deg) !important; padding: 25mm 20mm !important; max-width: 82% !important; box-sizing: border-box !important; margin: auto !important; } .cover-box h1 { font-family: var(--font-hand) !important; font-size: 3.5rem !important; line-height: 1.15 !important; margin: 0 !important; color: var(--schwarz) !important; } .cover-box p { font-family: var(--font-hand) !important; font-size: 1.6rem !important; color: var(--tannengruen) !important; margin-top: 14px !important; margin-bottom: 0 !important; } /* 2. TRENNSEITEN IM DRUCK */ .divider { width: 210mm !important; max-width: 210mm !important; min-width: 210mm !important; height: 297mm !important; min-height: 297mm !important; max-height: 297mm !important; box-sizing: border-box !important; padding: 35mm 15mm !important; display: flex !important; flex-direction: column !important; justify-content: center !important; align-items: center !important; text-align: center !important; background-color: var(--creme) !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; overflow: hidden !important; } .chapter-number { font-family: var(--font-hand) !important; font-size: 3rem !important; color: var(--altrosa) !important; margin-bottom: -8px !important; } .divider h2 { font-family: var(--font-hand) !important; font-size: 3.8rem !important; color: var(--tannengruen) !important; margin: 0 0 25px 0 !important; line-height: 1.15 !important; } .doodle-placeholder { width: 240px !important; height: 240px !important; border: 2.5px dashed var(--altrosa) !important; border-radius: 12px !important; background: rgba(210, 155, 155, 0.05) !important; display: flex !important; justify-content: center !important; align-items: center !important; position: relative !important; margin: 0 auto !important; } .doodle-placeholder.has-illustration, .doodle-placeholder:has(img) { border: none !important; background: transparent !important; } /* 3. EINZELNE REZEPTSEITE IM DRUCK */ .recipe-page { width: 210mm !important; max-width: 210mm !important; min-width: 210mm !important; height: 297mm !important; min-height: 297mm !important; max-height: 297mm !important; box-sizing: border-box !important; padding: 12mm 16mm 10mm 16mm !important; display: flex !important; flex-direction: column !important; justify-content: flex-start !important; gap: 8px !important; background-color: var(--creme) !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; overflow: hidden !important; } .recipe-header { border-bottom: 2px dashed rgba(30, 77, 59, 0.35) !important; padding-bottom: 6px !important; margin-bottom: 0 !important; } .recipe-header-top { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 2px !important; } .recipe-chapter-badge { font-size: 0.82rem !important; padding: 2px 8px !important; margin-bottom: 0 !important; background: var(--altrosa-light) !important; border: 1.5px solid var(--altrosa) !important; } .recipe-credits-badge { display: inline-block !important; font-family: var(--font-hand) !important; font-size: 0.78rem !important; color: #444 !important; padding: 1px 7px !important; background: rgba(30, 77, 59, 0.05) !important; border: 1px dashed rgba(30, 77, 59, 0.35) !important; border-radius: 8px !important; } .recipe-title { font-size: 2rem !important; margin: 0 0 4px 0 !important; line-height: 1.15 !important; color: var(--tannengruen) !important; } .recipe-meta-row { font-size: 0.88rem !important; gap: 12px !important; color: #4a453f !important; } /* Im Druck IMMER 2 Spalten: Links Bild + Zutaten, Rechts Zubereitung */ .recipe-grid { display: grid !important; grid-template-columns: 62mm 1fr !important; gap: 12mm !important; align-items: start !important; flex: 1 !important; } .recipe-side { display: flex !important; flex-direction: column !important; gap: 10px !important; } /* Bildgröße im Druck gezielt begrenzen (44mm hoch), damit Rezept auf 1 Seite passt */ .recipe-photo-box { width: 100% !important; height: 44mm !important; max-height: 44mm !important; aspect-ratio: auto !important; border: 1.5px solid var(--schwarz) !important; box-shadow: none !important; border-radius: 6px !important; background: rgba(30, 77, 59, 0.04) !important; overflow: hidden !important; } .recipe-photo-box img { width: 100% !important; height: 100% !important; object-fit: cover !important; display: block !important; } .recipe-photo-empty { display: none !important; } .ingredients-box { padding: 8px 12px !important; border: 1.5px solid rgba(30, 77, 59, 0.4) !important; background: rgba(255, 255, 255, 0.7) !important; border-radius: 6px !important; } .section-hand-title { font-size: 1.35rem !important; margin: 0 0 6px 0 !important; padding-bottom: 2px !important; border-bottom: 1.5px solid var(--altrosa) !important; color: var(--tannengruen) !important; } .ingredients-list { gap: 3px !important; } .ingredients-list li { font-size: 0.85rem !important; line-height: 1.25 !important; } .recipe-main { display: flex !important; flex-direction: column !important; gap: 10px !important; } .instructions-steps { gap: 8px !important; } .step-card { gap: 10px !important; } .step-badge { width: 22px !important; height: 22px !important; font-size: 0.9rem !important; background: var(--tannengruen) !important; color: var(--creme) !important; } .step-text { font-size: 0.9rem !important; line-height: 1.34 !important; padding-top: 1px !important; } .notes-box { padding: 6px 12px !important; font-size: 0.88rem !important; margin-top: 2px !important; background: #FFF9D2 !important; border: 1.5px solid #E2D172 !important; box-shadow: none !important; } .notes-box-title { font-size: 0.92rem !important; margin-bottom: 2px !important; } .recipe-source { display: none !important; } .notes-box-empty { display: block !important; padding: 6px 12px !important; margin-top: 4px !important; background: #FFFDF0 !important; border: 1.5px dashed #D4C165 !important; box-shadow: none !important; border-radius: 6px !important; } .notes-blank-lines { display: flex !important; flex-direction: column !important; gap: 8px !important; margin-top: 4px !important; padding-bottom: 2px !important; } .notes-blank-line { border-bottom: 1.5px dotted rgba(80, 70, 50, 0.45) !important; height: 14px !important; width: 100% !important; display: block !important; } .print-only { display: block !important; } .no-print { display: none !important; } } /* iOS Safari AirPrint Anpassung: Verhindert Seitenüberlauf und Stauchung */ @supports (-webkit-touch-callout: none) { @media print { html, body.cookbook-body { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: auto !important; min-height: auto !important; overflow: visible !important; background-color: var(--creme) !important; } .book-wrapper { width: 100% !important; max-width: 100% !important; min-width: 0 !important; margin: 0 !important; padding: 0 !important; } .page { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: auto !important; min-height: auto !important; max-height: none !important; box-sizing: border-box !important; background-color: var(--creme) !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .cover { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: 220mm !important; min-height: auto !important; max-height: 220mm !important; background-size: 100% 100% !important; background-position: 0 0 !important; background-repeat: no-repeat !important; padding: 16mm 10mm !important; box-sizing: border-box !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .cover-box { padding: 16mm 14mm !important; max-width: 85% !important; } .divider { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: 220mm !important; min-height: auto !important; max-height: 220mm !important; padding: 18mm 10mm !important; box-sizing: border-box !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .recipe-page { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: auto !important; min-height: auto !important; max-height: 225mm !important; padding: 6mm 10mm !important; box-sizing: border-box !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .recipe-grid { grid-template-columns: 55mm 1fr !important; gap: 8mm !important; width: 100% !important; min-width: 0 !important; } .page:last-child { page-break-after: auto !important; break-after: auto !important; } } } /* Fallback-Klasse falls JS is-ios gesetzt hat */ @media print { html.is-ios, body.is-ios.cookbook-body { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: auto !important; min-height: auto !important; overflow: visible !important; background-color: var(--creme) !important; } .is-ios .book-wrapper { display: block !important; width: 100% !important; max-width: 100% !important; min-width: 0 !important; margin: 0 !important; padding: 0 !important; gap: 0 !important; } .is-ios .page { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: auto !important; min-height: auto !important; max-height: none !important; margin: 0 !important; padding: 0 !important; box-sizing: border-box !important; background-color: var(--creme) !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .is-ios .cover { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: 220mm !important; min-height: auto !important; max-height: 220mm !important; background-size: 100% 100% !important; background-position: 0 0 !important; background-repeat: no-repeat !important; padding: 16mm 10mm !important; box-sizing: border-box !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .is-ios .cover-box { padding: 16mm 14mm !important; max-width: 85% !important; } .is-ios .divider { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: 220mm !important; min-height: auto !important; max-height: 220mm !important; padding: 18mm 10mm !important; box-sizing: border-box !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .is-ios .recipe-page { width: 100% !important; max-width: 100% !important; min-width: 0 !important; height: auto !important; min-height: auto !important; max-height: 225mm !important; padding: 6mm 10mm !important; box-sizing: border-box !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; } .is-ios .recipe-grid { grid-template-columns: 55mm 1fr !important; gap: 8mm !important; width: 100% !important; min-width: 0 !important; } .is-ios .notes-box-empty { display: block !important; padding: 4px 8px !important; margin-top: 3px !important; background: #FFFDF0 !important; border: 1px dashed #D4C165 !important; } .is-ios .notes-blank-lines { display: flex !important; flex-direction: column !important; gap: 8px !important; margin-top: 3px !important; } .is-ios .notes-blank-line { border-bottom: 1.5px dotted rgba(80, 70, 50, 0.45) !important; height: 12px !important; width: 100% !important; display: block !important; } .is-ios .print-only { display: block !important; } .is-ios .page:last-child { page-break-after: auto !important; break-after: auto !important; } } /* --- Cover Gestaltung --- */ .cover { background-color: var(--creme); background-image: url("data:image/svg+xml,%3Csvg preserveAspectRatio='none' viewBox='0 0 200 800' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M 5 0 Q 15 200 0 400 T 10 800 L 20 800 Q 10 600 25 400 T 15 0 Z' fill='%231E4D3B' opacity='0.9'/%3E%3Cpath d='M 35 0 Q 25 250 40 500 T 30 800 L 55 800 Q 65 500 45 250 T 50 0 Z' fill='%231E4D3B' opacity='0.85'/%3E%3Cpath d='M 70 0 Q 80 300 65 600 T 75 800 L 85 800 Q 75 500 90 300 T 80 0 Z' fill='%231E4D3B' opacity='0.9'/%3E%3Cpath d='M 105 0 Q 95 200 110 400 T 100 800 L 125 800 Q 135 600 120 400 T 125 0 Z' fill='%231E4D3B' opacity='0.8'/%3E%3Cpath d='M 140 0 Q 150 250 135 500 T 145 800 L 155 800 Q 145 500 160 250 T 150 0 Z' fill='%231E4D3B' opacity='0.9'/%3E%3Cpath d='M 175 0 Q 165 300 180 600 T 170 800 L 195 800 Q 205 500 185 300 T 190 0 Z' fill='%231E4D3B' opacity='0.85'/%3E%3C/svg%3E"); background-size: 100% 100%; display: flex; justify-content: center; align-items: center; padding: 60px 20px; } .cover-box { background-color: var(--creme); padding: 40px 50px; border: 3.5px solid var(--schwarz); border-radius: 4px; text-align: center; position: relative; transform: rotate(-1deg); box-shadow: 6px 6px 0px rgba(30, 77, 59, 0.4); } .cover-box h1 { font-family: var(--font-hand); font-size: 3.8rem; margin: 0; line-height: 1.15; color: var(--schwarz); } .cover-box p { font-family: var(--font-hand); font-size: 1.7rem; color: var(--tannengruen); margin-top: 18px; margin-bottom: 0; } /* --- Kapitel-Trennseiten --- */ .divider { display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; padding: 50px 30px; } .chapter-number { font-family: var(--font-hand); font-size: 3rem; color: var(--altrosa); margin-bottom: -10px; } .divider h2 { font-family: var(--font-hand); font-size: 4rem; color: var(--tannengruen); margin: 0 0 30px 0; line-height: 1.2; } .doodle-placeholder { width: 440px; height: 440px; max-width: 85vw; max-height: 52vh; margin-top: 15px; display: flex; justify-content: center; align-items: center; border: 2.5px dashed var(--altrosa); border-radius: 12px; position: relative; background: rgba(210, 155, 155, 0.05); } .doodle-placeholder.has-illustration, .doodle-placeholder:has(img) { border: none; background: transparent; } .doodle-placeholder img { width: 100%; height: 100%; max-width: 100%; max-height: 100%; object-fit: contain; mix-blend-mode: multiply; transition: transform 0.2s ease; } .doodle-placeholder img:hover { transform: scale(1.02); } .placeholder-text { font-family: var(--font-hand); color: #7a6e65; font-size: 1.25rem; position: absolute; text-align: center; padding: 20px; } /* --- Platzhalter für leere Kapitel (nur im Web-Browser) --- */ .empty-chapter-section { display: flex; flex-direction: column; gap: 20px; } .empty-chapter-header { background: var(--creme); border: 2px dashed rgba(30, 77, 59, 0.35); border-radius: 12px; padding: 40px 20px; text-align: center; } .empty-chapter-box { background: var(--creme); border: 2px dashed rgba(30, 77, 59, 0.35); border-radius: 12px; padding: 32px 20px; text-align: center; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; box-shadow: 0 4px 12px rgba(0,0,0,0.06); } .empty-chapter-text { font-family: var(--font-hand); font-size: 1.35rem; color: #7a6e65; margin: 0; } /* --- Einheitliches Rezept-Template --- */ .recipe-page { padding: 36px 40px; display: flex; flex-direction: column; gap: 24px; } .recipe-header { border-bottom: 2.5px dashed rgba(30, 77, 59, 0.3); padding-bottom: 18px; position: relative; } @media screen { .print-only { display: none !important; } } .recipe-header-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; flex-wrap: wrap; gap: 8px; } .recipe-chapter-badge { font-family: var(--font-hand); display: inline-block; background: var(--altrosa-light); color: var(--schwarz); border: 1.5px solid var(--altrosa); padding: 3px 12px; border-radius: 14px; font-size: 0.95rem; font-weight: 700; margin-bottom: 0; } .recipe-credits-badge { font-family: var(--font-hand); display: inline-block; background: rgba(30, 77, 59, 0.06); color: #4a453f; border: 1.5px dashed rgba(30, 77, 59, 0.35); padding: 3px 12px; border-radius: 14px; font-size: 0.92rem; font-weight: 700; } .recipe-title { font-family: var(--font-hand); font-size: 2.7rem; color: var(--tannengruen); margin: 0 0 10px 0; line-height: 1.15; } .recipe-meta-row { display: flex; flex-wrap: wrap; gap: 16px; font-family: var(--font-hand); font-size: 1.1rem; color: #4a453f; } .recipe-meta-item { display: flex; align-items: center; gap: 6px; } /* Recipe Content Grid (2 Columns on Desktop) */ .recipe-grid { display: grid; grid-template-columns: 320px 1fr; gap: 30px; } @media (max-width: 768px) { .recipe-grid { grid-template-columns: 1fr; gap: 20px; } } /* Left Column: Image + Ingredients */ .recipe-side { display: flex; flex-direction: column; gap: 20px; } .recipe-photo-box { width: 100%; aspect-ratio: 4 / 3; border: 2px solid var(--schwarz); border-radius: 8px; overflow: hidden; position: relative; background: rgba(30, 77, 59, 0.04); box-shadow: 4px 4px 0px rgba(0,0,0,0.1); } .recipe-photo-box img { width: 100%; height: 100%; object-fit: cover; mix-blend-mode: multiply; display: block; } .recipe-photo-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: #8c827a; font-family: var(--font-hand); font-size: 1.1rem; text-align: center; padding: 10px; } .ingredients-box { background: rgba(255, 255, 255, 0.6); border: 2px solid rgba(30, 77, 59, 0.35); border-radius: 8px; padding: 20px; } .section-hand-title { font-family: var(--font-hand); font-size: 1.6rem; color: var(--tannengruen); margin: 0 0 12px 0; display: flex; align-items: center; gap: 8px; border-bottom: 1.5px solid var(--altrosa); padding-bottom: 4px; } .ingredients-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; } .ingredients-list li { font-family: var(--font-sans); font-size: 0.95rem; color: var(--schwarz); display: flex; align-items: flex-start; gap: 8px; line-height: 1.4; } .ingredients-list li::before { content: "•"; color: var(--tannengruen); font-weight: bold; font-size: 1.2rem; line-height: 1; } /* Right Column: Steps + Notes */ .recipe-main { display: flex; flex-direction: column; gap: 22px; } .instructions-content { font-family: var(--font-sans); font-size: 1.05rem; line-height: 1.7; color: #2b2b2b; white-space: pre-line; } .instructions-steps { display: flex; flex-direction: column; gap: 14px; } .step-card { display: flex; gap: 14px; align-items: flex-start; } .step-badge { font-family: var(--font-hand); background: var(--tannengruen); color: var(--creme); width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; font-weight: 700; flex-shrink: 0; } .step-text { flex: 1; padding-top: 3px; } /* Notes & Tips Box (Post-It style) */ .notes-box { background: #FFF9D2; border: 1.5px solid #E2D172; border-radius: 6px; padding: 16px 20px; font-family: var(--font-hand); font-size: 1.15rem; color: #4a3e14; transform: rotate(-0.5deg); box-shadow: 3px 3px 8px rgba(0,0,0,0.06); } .notes-box-title { font-weight: bold; color: #735a09; margin-bottom: 6px; } /* Credits / Copyright Badge */ .recipe-source { font-family: var(--font-hand); font-size: 1.05rem; color: #555; display: flex; align-items: center; gap: 6px; margin-top: 10px; padding-top: 8px; border-top: 1.5px dashed rgba(34, 34, 34, 0.2); } /* --- Recipe Form Styles --- */ .form-card { background: var(--creme); border: 3px solid var(--schwarz); border-radius: 12px; padding: 30px; box-shadow: 6px 6px 0px rgba(30, 77, 59, 0.4); } .form-title { font-family: var(--font-hand); font-size: 2.4rem; color: var(--tannengruen); margin: 0 0 8px 0; } .form-subtitle { font-family: var(--font-hand); font-size: 1.2rem; color: #666; margin-bottom: 24px; } .cb-form-group { display: flex; flex-direction: column; gap: 6px; margin-bottom: 18px; } .cb-label { font-family: var(--font-hand); font-size: 1.15rem; font-weight: 700; color: var(--schwarz); } .cb-input, .cb-textarea, .cb-select { font-family: var(--font-sans); font-size: 1rem; padding: 12px 14px; background: #fff; border: 2px solid var(--schwarz); border-radius: 6px; color: var(--schwarz); outline: none; transition: border-color 0.2s, box-shadow 0.2s; box-sizing: border-box; } .cb-input:focus, .cb-textarea:focus, .cb-select:focus { border-color: var(--tannengruen); box-shadow: 0 0 0 3px rgba(30, 77, 59, 0.2); } .cb-row { display: flex; gap: 16px; flex-wrap: wrap; } .cb-col { flex: 1; min-width: 160px; } /* Image Upload Widget */ .upload-dropzone { border: 2.5px dashed var(--tannengruen); border-radius: 10px; background: rgba(30, 77, 59, 0.04); padding: 24px; text-align: center; cursor: pointer; transition: background 0.2s; position: relative; } .upload-dropzone:hover { background: rgba(30, 77, 59, 0.08); } .preview-container { margin-top: 14px; max-width: 260px; border-radius: 8px; overflow: hidden; border: 2px solid var(--schwarz); display: none; } .preview-container img { width: 100%; display: block; mix-blend-mode: multiply; } /* Mobile responsive adjustments (nur Screen, niemals Print!) */ @media screen and (max-width: 680px) { .hide-mobile { display: none !important; } .cb-nav { padding: 8px 10px; gap: 6px; } .cb-filter-bar { top: 46px; padding: 6px 10px; gap: 6px; } .cb-nav-brand { gap: 4px; } .cb-brand-icon { font-size: 1.3rem; } .cb-nav-title { font-size: 1.15rem; } .cb-nav-actions { gap: 5px; } .cb-btn, .cb-nav-btn { padding: 5px 9px; font-size: 0.88rem; border-radius: 6px; gap: 4px; } .book-wrapper { padding: 0 10px; margin: 16px auto; gap: 20px; max-width: 100vw; } .page { min-height: auto; max-width: 100%; overflow-x: hidden; } .cover { padding: 36px 12px; } .cover-box { padding: 24px 16px; max-width: 92vw; box-sizing: border-box; } .cover-box h1 { font-size: 2.3rem; line-height: 1.15; } .cover-box p { font-size: 1.25rem; margin-top: 10px; } .divider { padding: 36px 14px; } .chapter-number { font-size: 2rem; margin-bottom: -5px; } .divider h2 { font-size: 2.4rem; margin: 0 0 20px 0; word-break: break-word; } .doodle-placeholder { width: min(280px, 85vw); height: min(280px, 85vw); margin-top: 10px; } .placeholder-text { font-size: 1.1rem; padding: 12px; } .recipe-page { padding: 18px 14px; gap: 16px; } .recipe-title { font-size: 1.85rem; margin-bottom: 8px; word-break: break-word; } .recipe-meta-row { font-size: 0.95rem; gap: 10px; } .recipe-grid { grid-template-columns: 1fr; gap: 16px; } .form-card { padding: 18px 14px; } .form-title { font-size: 1.85rem; } } @media screen and (max-width: 380px) { .cb-nav { padding: 6px 8px; } .cb-filter-bar { top: 40px; padding: 5px 8px; } .cb-nav-title { font-size: 1rem; } .cb-btn { padding: 5px 8px; font-size: 0.82rem; } } /* ========================================================================== Modals: Generator & Neues Rezept (im Buch-Design) ========================================================================== */ .cb-modal-backdrop { position: fixed; inset: 0; background: rgba(20, 30, 25, 0.7); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); z-index: 2000; display: flex; align-items: flex-start; justify-content: center; padding: 16px 12px calc(36px + env(safe-area-inset-bottom, 0px)) 12px; opacity: 0; visibility: hidden; transition: opacity 0.25s ease, visibility 0.25s ease; box-sizing: border-box; overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; touch-action: pan-y; } .cb-modal-backdrop.active { opacity: 1; visibility: visible; } .cb-modal-card { background: var(--creme); border: 2.5px solid var(--schwarz); border-radius: 12px; width: 100%; max-width: 680px; max-height: 88vh; max-height: calc(100svh - 36px); max-height: calc(100dvh - 36px); display: flex; flex-direction: column; box-shadow: 6px 6px 0px rgba(30, 77, 59, 0.4); transform: translateY(20px) scale(0.98); transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1); overflow: hidden; box-sizing: border-box; margin: 16px auto calc(24px + env(safe-area-inset-bottom, 0px)) auto; position: relative; touch-action: pan-y; } .cb-modal-backdrop.active .cb-modal-card { transform: translateY(0) scale(1); } .cb-modal-header { padding: 12px 18px; background: var(--tannengruen); color: var(--creme); border-bottom: 2px solid var(--schwarz); display: flex; align-items: center; justify-content: space-between; position: sticky; top: 0; z-index: 20; flex-shrink: 0; } .cb-modal-title { font-family: var(--font-hand); font-size: 1.45rem; margin: 0; color: var(--creme); display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; word-break: break-word; line-height: 1.2; } .cb-modal-close { background: rgba(250, 246, 240, 0.15); border: 1.5px solid rgba(250, 246, 240, 0.6); color: var(--creme); font-size: 1.5rem; cursor: pointer; line-height: 1; width: 36px; height: 36px; min-width: 36px; min-height: 36px; padding: 0; border-radius: 8px; transition: all 0.2s; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; margin-left: 10px; } .cb-modal-close:hover { background: rgba(250, 246, 240, 0.3); border-color: #ffffff; color: #ffffff; } .cb-modal-body { padding: 18px 22px; overflow-y: auto; -webkit-overflow-scrolling: touch; flex: 1 1 auto; min-height: 0; padding: 18px 22px calc(32px + env(safe-area-inset-bottom, 0px)) 22px; } @media screen and (max-width: 600px) { .cb-modal-backdrop { padding: 8px 6px calc(28px + env(safe-area-inset-bottom, 0px)) 6px; } .cb-modal-card { max-height: 90vh; max-height: calc(100svh - 20px); max-height: calc(100dvh - 20px); border-radius: 10px; margin: 8px auto calc(16px + env(safe-area-inset-bottom, 0px)) auto; } .cb-modal-header { padding: 10px 14px; } .cb-modal-title { font-size: 1.2rem; } .cb-modal-close { width: 34px; height: 34px; min-width: 34px; min-height: 34px; font-size: 1.35rem; } .cb-modal-body { padding: 14px 14px calc(28px + env(safe-area-inset-bottom, 0px)) 14px; } } /* --- Generator Modal Spezifisch --- */ .gen-count-pills { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; } .gen-count-btn { font-family: var(--font-hand); font-size: 1.1rem; font-weight: 700; padding: 6px 14px; border-radius: 20px; border: 2px solid var(--schwarz); background: #fff; color: var(--schwarz); cursor: pointer; transition: all 0.15s ease; } .gen-count-btn.active, .gen-count-btn:hover { background: var(--tannengruen); color: var(--creme); border-color: var(--tannengruen); } .gen-slot-item { background: #fff; border: 2px solid var(--schwarz); border-radius: 10px; padding: 14px 16px; margin-bottom: 12px; box-shadow: 3px 3px 0px rgba(30, 77, 59, 0.2); } .gen-slot-header { font-family: var(--font-hand); font-size: 1.25rem; font-weight: 700; color: var(--tannengruen); margin-bottom: 8px; display: flex; justify-content: space-between; align-items: center; } .gen-effort-chips { display: flex; gap: 6px; margin-top: 6px; } .gen-effort-chip { font-family: var(--font-hand); font-size: 0.95rem; padding: 4px 10px; border-radius: 16px; border: 1.5px solid rgba(34, 34, 34, 0.3); background: var(--creme); cursor: pointer; transition: all 0.15s; } .gen-effort-chip.selected { background: var(--tannengruen); color: var(--creme); border-color: var(--tannengruen); font-weight: 700; } .gen-result-card { background: #fff; border: 2.5px solid var(--schwarz); border-radius: 12px; padding: 16px 20px; margin-bottom: 12px; box-shadow: 4px 4px 0px rgba(30, 77, 59, 0.25); display: flex; flex-direction: column; gap: 8px; animation: cardPopIn 0.3s ease; } @keyframes cardPopIn { from { opacity: 0; transform: scale(0.96) translateY(10px); } to { opacity: 1; transform: scale(1) translateY(0); } } .gen-dish-name { font-family: var(--font-hand); font-size: 1.8rem; color: var(--tannengruen); margin: 0; line-height: 1.2; } .gen-badge-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; } .gen-tag { font-family: var(--font-sans); font-size: 0.85rem; font-weight: 600; padding: 3px 8px; border-radius: 6px; border: 1px solid rgba(34, 34, 34, 0.2); } .gen-tag-chapter { display: inline-flex; align-items: center; gap: 6px; background: var(--creme); border: 1.5px solid var(--tannengruen); color: var(--tannengruen); font-weight: 700; padding: 3px 10px; border-radius: 12px; } .gen-chapter-thumb { width: 20px; height: 20px; object-fit: contain; mix-blend-mode: multiply; vertical-align: middle; } .gen-actions { display: flex; gap: 8px; align-items: center; margin-top: 6px; flex-wrap: wrap; } /* Toast Notifications */ .cb-toast { position: fixed; bottom: 24px; right: 24px; background: var(--tannengruen); color: var(--creme); border: 2px solid var(--schwarz); border-radius: 8px; padding: 12px 20px; font-family: var(--font-hand); font-size: 1.2rem; box-shadow: 4px 4px 0px rgba(0, 0, 0, 0.3); z-index: 3000; display: flex; align-items: center; gap: 10px; animation: toastFade 0.3s ease; } @keyframes toastFade { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* --- Modal Action Buttons --- */ .cb-btn-modal-cancel { background: transparent; color: var(--schwarz); border: 2px solid rgba(34, 34, 34, 0.35); font-size: 1.05rem; padding: 8px 18px; } .cb-btn-modal-cancel:hover { background: rgba(0, 0, 0, 0.05); border-color: var(--schwarz); } .cb-btn-modal-submit { background: var(--tannengruen); color: var(--creme); border: 2px solid var(--tannengruen); font-size: 1.1rem; padding: 8px 22px; } .cb-btn-modal-submit:hover { background: #143729; border-color: #143729; color: #ffffff; transform: translateY(-1px); } /* ========================================================================== Custom Chapter Selector (Mit handgezeichneten Doodles) ========================================================================== */ .custom-chapter-select { position: relative; width: 100%; } .chapter-select-btn { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; padding: 8px 12px; background: #ffffff; border: 2px solid rgba(34, 34, 34, 0.35); border-radius: 8px; font-family: var(--font-hand); font-size: 1.05rem; color: var(--schwarz); cursor: pointer; text-align: left; transition: all 0.15s ease; box-sizing: border-box; } .chapter-select-btn:hover, .chapter-select-btn:focus { border-color: var(--tannengruen); box-shadow: 0 0 0 2px rgba(30, 77, 59, 0.15); outline: none; } .chapter-select-btn-content { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; } .chapter-select-thumb { width: 28px; height: 28px; object-fit: contain; flex-shrink: 0; border-radius: 4px; } .chapter-select-btn-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-weight: 700; } .chapter-select-arrow { font-size: 0.8rem; color: #777; transition: transform 0.2s ease; flex-shrink: 0; } .custom-chapter-select.is-open .chapter-select-arrow { transform: rotate(180deg); } .chapter-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; right: 0; background: var(--creme); border: 2.5px solid var(--schwarz); border-radius: 10px; box-shadow: 4px 6px 16px rgba(0, 0, 0, 0.25); max-height: 280px; overflow-y: auto; z-index: 1000; padding: 4px 0; -webkit-overflow-scrolling: touch; } .custom-chapter-select.is-open .chapter-dropdown-menu { display: block; animation: dropdownFadeIn 0.18s ease-out; } @keyframes dropdownFadeIn { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: translateY(0); } } .chapter-option { display: flex; align-items: center; gap: 10px; padding: 8px 12px; cursor: pointer; border-bottom: 1px dashed rgba(34, 34, 34, 0.12); transition: background 0.12s ease; font-family: var(--font-hand); font-size: 1.05rem; color: var(--schwarz); } .chapter-option:last-child { border-bottom: none; } .chapter-option:hover { background: rgba(30, 77, 59, 0.1); } .chapter-option.is-selected { background: rgba(30, 77, 59, 0.16); font-weight: 700; } .chapter-option-thumb { width: 32px; height: 32px; object-fit: contain; flex-shrink: 0; background: #ffffff; border: 1px solid rgba(34, 34, 34, 0.18); border-radius: 6px; padding: 2px; } .chapter-option-text { flex: 1; min-width: 0; line-height: 1.2; } .chapter-option-title { font-weight: 700; color: var(--tannengruen); } .chapter-recipe-count { font-family: var(--font-sans); font-size: 0.78rem; font-weight: 700; padding: 2px 7px; border-radius: 10px; background: rgba(30, 77, 59, 0.1); color: var(--tannengruen); white-space: nowrap; } .chapter-recipe-count.zero { background: rgba(0, 0, 0, 0.06); color: #888888; } /* ========================================================================== VERSION 4.1: MOBILE 3-PUNKTE-MENÜ, PORTION-MATRIX-TABELLE, RECHTE SEITENZAHL ========================================================================== */ /* --- Mobile Navigation: 3-Punkte (Kebab) Menü --- */ .desktop-nav-actions { display: flex; align-items: center; gap: 10px; } .mobile-nav-wrapper { display: none; position: relative; } .cb-kebab-btn { background: var(--creme); color: var(--tannengruen); border: 2px solid var(--tannengruen); border-radius: 8px; width: 38px; height: 38px; display: flex; align-items: center; justify-content: center; font-size: 1.6rem; line-height: 1; cursor: pointer; padding: 0; transition: all 0.15s ease; font-weight: bold; } .cb-kebab-btn:hover, .cb-kebab-btn:active { background: var(--tannengruen); color: var(--creme); } .cb-mobile-dropdown { display: none; position: absolute; top: calc(100% + 8px); right: 0; background: var(--creme); border: 2px solid var(--schwarz); border-radius: 10px; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25); min-width: 220px; padding: 6px 0; z-index: 2500; animation: dropdownFadeIn 0.18s ease-out; } .cb-mobile-dropdown.is-open { display: block; } .cb-mobile-item { display: flex; align-items: center; gap: 12px; width: 100%; padding: 10px 18px; background: transparent; border: none; text-align: left; font-family: var(--font-hand); font-size: 1.15rem; color: var(--schwarz); cursor: pointer; text-decoration: none; box-sizing: border-box; transition: background 0.12s ease; } .cb-mobile-item:hover, .cb-mobile-item:active { background: rgba(30, 77, 59, 0.12); color: var(--tannengruen); } .cb-mobile-divider { border: none; border-top: 1px dashed rgba(34, 34, 34, 0.2); margin: 4px 0; } .cb-mobile-logout { color: #9b1c1c !important; } .cb-nav-btn-logout { background: rgba(255, 255, 255, 0.15) !important; color: #fff !important; border-color: rgba(255, 255, 255, 0.4) !important; } .cb-nav-btn-logout:hover { background: #fdf2f2 !important; color: #9b1c1c !important; border-color: #f8b4b4 !important; } @media screen and (max-width: 768px) { .desktop-nav-actions { display: none !important; } .mobile-nav-wrapper { display: block !important; } } /* --- Multi-Portionen-Tabelle (2 / 4 / 6 / 8 Portionen) --- */ .portion-matrix-table { width: 100%; border-collapse: collapse; margin-top: 4px; font-size: 0.82rem; } .portion-matrix-table th { font-family: var(--font-sans); font-size: 0.78rem; font-weight: 700; color: var(--tannengruen); padding: 4px 3px; border-bottom: 1.5px solid var(--tannengruen); text-align: center; } .portion-matrix-table th.matrix-th-ing { text-align: left; } .portion-matrix-table td { padding: 3px 2px; border-bottom: 1px dashed rgba(30, 61, 47, 0.15); vertical-align: middle; } .portion-matrix-table td.matrix-td-name { font-family: var(--font-sans); color: var(--schwarz); font-weight: 500; } .portion-matrix-table td.matrix-td-amt { text-align: center; font-weight: 600; color: var(--tannengruen); white-space: nowrap; } .portion-matrix-table td.matrix-td-amt.highlight { background: rgba(30, 61, 47, 0.04); } .portion-matrix-table tr.matrix-header-row th { padding: 6px 0 2px 0; text-align: left; font-family: var(--font-hand); font-size: 0.95rem; color: var(--tannengruen); border-bottom: 1px solid var(--tannengruen); } /* --- Zutaten-Unterüberschriften in normaler Liste --- */ .ingredients-list li.ing-subheading { font-family: var(--font-hand); font-size: 1.15rem; font-weight: 700; color: var(--tannengruen); margin-top: 8px; margin-bottom: 2px; list-style: none; border-bottom: 1px dashed var(--altrosa); padding-bottom: 2px; } .ingredients-list li.ing-subheading::before { display: none !important; } /* --- Quelle am Rezept-Ende --- */ .recipe-source-line { margin-top: 10px; font-family: var(--font-sans); font-size: 0.88rem; color: #666; display: flex; align-items: baseline; gap: 6px; border-top: 1px dotted rgba(34, 34, 34, 0.2); padding-top: 6px; } .recipe-source-label { font-weight: 700; color: var(--tannengruen); } .recipe-source-val { font-style: italic; color: #444; } /* --- Inhaltsverzeichnis (TOC) --- */ .toc-page { padding: 14mm 16mm 14mm 16mm; position: relative; display: flex; flex-direction: column; } .toc-header { text-align: center; margin-bottom: 8mm; } .toc-subhead { font-family: var(--font-sans); text-transform: uppercase; letter-spacing: 2px; font-size: 0.78rem; color: var(--gold); font-weight: 700; margin-bottom: 2px; } .toc-title { font-family: var(--font-title); font-size: 2.2rem; color: var(--tannengruen); margin: 0; line-height: 1.1; } .toc-divider-ornament { color: var(--gold); font-size: 0.9rem; letter-spacing: 6px; margin-top: 4px; } .toc-columns { columns: 2; column-gap: 10mm; flex: 1; } .toc-chapter-group { break-inside: avoid; page-break-inside: avoid; margin-bottom: 6mm; } .toc-chapter-header { display: flex; align-items: baseline; gap: 6px; font-family: var(--font-title); font-size: 1rem; font-weight: 700; color: var(--tannengruen); border-bottom: 1.5px solid var(--gold); padding-bottom: 2px; margin-bottom: 4px; } .toc-chap-icon { font-size: 1.1rem; } .toc-chap-title { white-space: nowrap; } .toc-dots { flex: 1; border-bottom: 1px dotted rgba(30, 61, 47, 0.4); margin: 0 4px; height: 1px; } .toc-page-num { font-family: var(--font-sans); font-weight: 700; font-size: 0.88rem; color: var(--tannengruen); } .toc-recipe-list { list-style: none; padding: 0; margin: 0; } .toc-recipe-item { margin: 3px 0; } .toc-recipe-link { display: flex; align-items: baseline; text-decoration: none; color: var(--schwarz); font-size: 0.84rem; line-height: 1.25; transition: color 0.15s ease; } .toc-recipe-link:hover { color: var(--tannengruen); } .toc-rec-title { max-width: 75%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* --- Einheitliche Seitenzahlen: Buch-Druck abwechselnd links (gerade) / rechts (ungerade) --- */ .page-footer { position: absolute; bottom: 8mm; border-top: none; padding: 0; margin: 0; background: transparent; display: flex; align-items: center; z-index: 50; } .page-footer.page-even { left: 14mm; right: auto; justify-content: flex-start; text-align: left; } .page-footer.page-odd { right: 14mm; left: auto; justify-content: flex-end; text-align: right; } .page-footer .page-number { font-family: var(--font-sans); font-size: 1rem; font-weight: 700; color: var(--tannengruen); line-height: 1; } /* Titelseite, Inhaltsverzeichnis und Seitenzahlen sind rein für den Druck gedacht */ .page.cover, .page.toc-page, .page-footer { display: none !important; } /* Modal Scroll Lock für Hintergrundseite */ body.modal-open { overflow: hidden !important; } .cb-modal-backdrop { overscroll-behavior: contain; touch-action: pan-y; } .cb-modal-card { overscroll-behavior: contain; touch-action: pan-y; } .cb-modal-body { overscroll-behavior: contain; -webkit-overflow-scrolling: touch; touch-action: pan-y; } /* ========================================================================== Wochenmenü-Plan (Meal Planner) ========================================================================== */ .mealplan-week-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: var(--creme); border: 2px solid var(--tannengruen); border-radius: 10px; padding: 8px 14px; margin-bottom: 16px; flex-wrap: wrap; } .mealplan-week-nav { display: flex; align-items: center; gap: 8px; } .mealplan-week-badge { font-family: var(--font-hand); font-size: 1.25rem; font-weight: 700; color: var(--tannengruen); display: flex; align-items: center; gap: 6px; } .mealplan-today-tag { font-size: 0.75rem; background: var(--altrosa); color: var(--creme); padding: 2px 8px; border-radius: 12px; font-weight: 700; text-transform: uppercase; } .mealplan-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; margin-top: 10px; } @media screen and (min-width: 1024px) { .mealplan-grid { grid-template-columns: repeat(7, 1fr); gap: 8px; } } .mealplan-day-card { background: #ffffff; border: 1.5px solid rgba(34, 34, 34, 0.2); border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; transition: box-shadow 0.2s; box-shadow: 2px 2px 0px rgba(0,0,0,0.06); } .mealplan-day-card.is-today { border: 2px solid var(--tannengruen); box-shadow: 3px 3px 0px var(--tannengruen); } .mealplan-day-header { background: rgba(30, 77, 59, 0.08); padding: 8px 10px; border-bottom: 1.5px solid rgba(34, 34, 34, 0.15); display: flex; justify-content: space-between; align-items: center; } .mealplan-day-card.is-today .mealplan-day-header { background: var(--tannengruen); color: var(--creme); } .mealplan-day-name { font-family: var(--font-hand); font-size: 1.15rem; font-weight: 700; line-height: 1.1; } .mealplan-day-date { font-size: 0.82rem; font-weight: 600; color: #666; } .mealplan-day-card.is-today .mealplan-day-date { color: rgba(250, 246, 240, 0.85); } .mealplan-day-slots { padding: 8px; display: flex; flex-direction: column; gap: 8px; flex: 1; } /* Gefüllte Mahlzeit im Wochenplan (kompakt & übersichtlich) */ .mealplan-slot.has-meal { background: #ffffff; border: 1.5px solid rgba(30, 77, 59, 0.22); border-radius: 8px; padding: 8px 10px; font-size: 0.88rem; display: flex; flex-direction: column; gap: 4px; box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.05); transition: all 0.15s; } .mealplan-slot.has-meal:hover { background: #faf7f2; border-color: var(--tannengruen); } .mealplan-slot-top { display: flex; justify-content: space-between; align-items: center; } .mealplan-slot-badge { font-size: 0.74rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--tannengruen); } .mealplan-slot-title { font-size: 0.9rem; font-weight: 600; color: var(--schwarz); line-height: 1.3; word-break: break-word; } .mealplan-recipe-link { color: var(--tannengruen); text-decoration: underline; text-underline-offset: 2px; } .mealplan-recipe-link:hover { color: #143729; } .mealplan-slot-actions { display: flex; gap: 4px; align-items: center; } .mealplan-action-btn { background: transparent; border: none; font-size: 0.82rem; cursor: pointer; padding: 2px 4px; border-radius: 4px; color: #666; transition: background 0.15s; } .mealplan-action-btn:hover { background: rgba(0, 0, 0, 0.08); color: var(--schwarz); } .mealplan-action-btn.btn-delete:hover { color: #c53030; background: #fff0f0; } /* Button zum Hinzufügen einer weiteren Mahlzeit für den Tag */ .mealplan-add-meal-btn { background: rgba(30, 77, 59, 0.04); border: 1.5px dashed rgba(30, 77, 59, 0.35); border-radius: 8px; padding: 7px 10px; color: var(--tannengruen); font-size: 0.84rem; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px; transition: all 0.15s; width: 100%; } .mealplan-add-meal-btn:hover { background: rgba(30, 77, 59, 0.1); border-color: var(--tannengruen); } .mealplan-empty-day-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 10px 4px; } /* Mahlzeittyp-Auswahlchips im Bearbeiten-Modal */ .slot-type-chips { display: flex; gap: 8px; margin-bottom: 14px; } .slot-type-chip { flex: 1; padding: 8px 10px; background: #ffffff; border: 1.5px solid rgba(34, 34, 34, 0.25); border-radius: 8px; font-family: var(--font-sans); font-size: 0.92rem; font-weight: 600; color: var(--schwarz); cursor: pointer; transition: all 0.15s; text-align: center; } .slot-type-chip:hover { border-color: var(--tannengruen); background: rgba(30, 77, 59, 0.05); } .slot-type-chip.active { background: var(--tannengruen); border-color: var(--tannengruen); color: var(--creme); box-shadow: 2px 2px 0px rgba(0, 0, 0, 0.15); } /* --- Druck-Spezifische Optimierungen (Exakte A4-Höhe 297mm & Seitenzahlen millimetergenau am Fuß) --- */ @media print { /* Titelseite, Inhaltsverzeichnis und Seitenzahlen IM DRUCK SICHTBAR */ .page.cover { display: flex !important; } .page.toc-page { display: flex !important; } /* A4 Druck: 282mm Höhe passt exakt in AirPrint & Standard-Drucker ohne 2. Seite für Seitenzahl */ .page, .cover, .toc-page, .divider, .recipe-page { width: 210mm !important; max-width: 210mm !important; min-width: 210mm !important; height: 282mm !important; min-height: 282mm !important; max-height: 282mm !important; box-sizing: border-box !important; overflow: hidden !important; page-break-after: always !important; break-after: page !important; page-break-inside: avoid !important; break-inside: avoid !important; display: flex !important; flex-direction: column !important; } /* Fußzeile mit Seitenzahl: Im Flex-Flow ganz unten (niemals im Zutatenblock oder schwebend) */ .page-footer { display: flex !important; margin-top: auto !important; position: relative !important; bottom: auto !important; border: none !important; padding: 3mm 0 2mm 0 !important; width: 100% !important; box-sizing: border-box !important; z-index: 100 !important; } .divider { padding: 14mm 10mm !important; justify-content: center !important; } .doodle-placeholder { width: 140mm !important; height: 140mm !important; max-width: 140mm !important; max-height: 140mm !important; margin: 6mm auto 0 auto !important; } .doodle-placeholder img { width: 100% !important; height: 100% !important; object-fit: contain !important; } .page-footer.page-even { left: auto !important; right: auto !important; justify-content: flex-start !important; text-align: left !important; padding-left: 4mm !important; padding-right: 0 !important; } .page-footer.page-odd { right: auto !important; left: auto !important; justify-content: flex-end !important; text-align: right !important; padding-right: 4mm !important; padding-left: 0 !important; } .page-footer .page-number { font-size: 0.95rem !important; font-weight: 700 !important; color: var(--tannengruen) !important; } .recipe-page { padding: 6mm 10mm !important; overflow: hidden !important; } .recipe-source-line { display: none !important; } .ingredients-box { padding: 6px 8px !important; } .ingredients-list { gap: 2px !important; } .ingredients-list li { font-size: 0.80rem !important; line-height: 1.25 !important; } .ingredients-list li.ing-subheading { font-size: 0.84rem !important; margin-top: 3px !important; padding-bottom: 1px !important; } .recipe-photo-box { height: 38mm !important; max-height: 38mm !important; } .portion-matrix-table { font-size: 0.72rem !important; line-height: 1.2 !important; } .portion-matrix-table th { padding: 1px 2px !important; font-size: 0.7rem !important; } .portion-matrix-table td { padding: 1px 2px !important; } .recipe-grid:has(.has-portion-matrix) { grid-template-columns: 68mm 1fr !important; gap: 8mm !important; } }