/** * CABINET Display - Shared Styles * Format: 9:16 (1080×1920px) * Safe-Area: 64px */ :root { /* Colors */ --bg: #ffffff; --fg: #1a1a1a; --fg-strong: #000000; --muted: #737373; --muted-light: #999999; --line: #e8e8e8; --card: #f5f5f5; --accent: #009FE3; /* Cabinet Blau */ /* Spacing */ --safe-area: 64px; --radius: 24px; --radius-sm: 16px; /* Typography Scale (modular) */ --text-xs: 16px; --text-sm: 18px; --text-base: 20px; --text-lg: 24px; --text-xl: 28px; --text-2xl: 32px; --text-3xl: 42px; --text-4xl: 54px; --text-5xl: 64px; --text-6xl: 84px; /* Font */ --font-main: 'IBM Plex Sans', ui-sans-serif, system-ui, -apple-system, sans-serif; /* Dimensions */ --max-width: 1080px; --max-height: 1920px; } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; width: 100%; overflow: hidden; } body { font-family: var(--font-main); background: #0a0a0a; color: var(--fg); display: flex; align-items: center; justify-content: center; /* Text Rendering */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } /* ======================================== SCREEN CONTAINER (9:16 Frame) ======================================== */ .screen { width: 100vw; height: 100vh; max-width: var(--max-width); max-height: var(--max-height); aspect-ratio: 9 / 16; background: var(--bg); position: relative; overflow: hidden; } /* Maintain aspect ratio */ @media (min-aspect-ratio: 9/16) { .screen { width: auto; height: 100vh; } } @media (max-aspect-ratio: 9/16) { .screen { width: 100vw; height: auto; } } /* ======================================== SLIDE LAYOUT ======================================== */ .slide { position: absolute; inset: 0; padding: var(--safe-area); display: grid; grid-template-rows: auto 1fr auto; gap: 32px; background: var(--bg); } /* ======================================== HEADER ======================================== */ .header { display: flex; align-items: flex-end; justify-content: space-between; padding-bottom: 24px; border-bottom: 1px solid var(--line); min-height: 100px; } .brand { display: flex; align-items: center; gap: 14px; } .brand-logo { height: 82px; width: auto; } .brand-text { font-size: var(--text-xl); font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--fg-strong); } .tagline { font-size: var(--text-lg); color: var(--muted); text-align: right; line-height: 1.4; font-weight: 400; letter-spacing: 0.01em; } /* ======================================== HERO SECTION ======================================== */ .hero { border-radius: var(--radius); background: linear-gradient(145deg, #f5f5f5, #fafafa); border: 1px solid var(--line); overflow: hidden; position: relative; display: flex; align-items: flex-end; justify-content: flex-start; padding: 32px; } .hero.has-image { background-size: cover; background-position: center; background-repeat: no-repeat; } .hero-badge { font-size: var(--text-base); font-weight: 500; color: var(--fg); background: rgba(255, 255, 255, 0.92); border: 1px solid rgba(0, 0, 0, 0.08); border-radius: 100px; padding: 14px 24px; backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); letter-spacing: 0.01em; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06); } /* Placeholder für Entwicklung */ .hero-placeholder { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 18px; color: var(--muted); background: radial-gradient(circle at 30% 30%, rgba(0,0,0,0.03), transparent 50%), linear-gradient(145deg, #f2f2f2, #fafafa); } /* ======================================== BOTTOM SECTION (Info + QR) ======================================== */ .bottom { display: grid; grid-template-columns: 1fr 300px; gap: 24px; align-items: stretch; } /* Info Box */ .info { display: flex; flex-direction: column; justify-content: space-between; background: linear-gradient(180deg, #ffffff, #fafafa); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px; min-height: 340px; } .info-content { flex: 1; } .eyebrow { font-size: var(--text-sm); color: var(--muted); letter-spacing: 0.14em; text-transform: uppercase; margin-bottom: 14px; font-weight: 500; } .title { font-size: var(--text-4xl); line-height: 1.08; font-weight: 700; margin-bottom: 14px; color: var(--fg-strong); letter-spacing: -0.02em; } .title.large { font-size: var(--text-5xl); letter-spacing: -0.025em; } .title.medium { font-size: var(--text-3xl); letter-spacing: -0.015em; } .subline { font-size: var(--text-xl); color: var(--muted); line-height: 1.35; margin-bottom: 16px; font-weight: 400; } /* Price Display */ .price-block { margin-top: auto; padding-top: 24px; border-top: 1px solid var(--line); } .price-row { display: flex; align-items: baseline; justify-content: space-between; gap: 20px; } .price { font-size: var(--text-6xl); font-weight: 700; letter-spacing: -0.03em; color: var(--fg-strong); line-height: 1; font-feature-settings: 'tnum' 1; /* Tabular numbers */ } .price-note { font-size: var(--text-lg); color: var(--muted); text-align: right; line-height: 1.35; font-weight: 400; } /* Bullets List */ .bullets { list-style: none; display: flex; flex-direction: column; gap: 14px; margin-top: 20px; } .bullets li { font-size: var(--text-xl); line-height: 1.35; display: flex; align-items: flex-start; gap: 16px; color: var(--fg); font-weight: 400; } .bullets .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); margin-top: 13px; flex-shrink: 0; } /* Footer Text (within info box) */ .info-footer { margin-top: auto; padding-top: 20px; border-top: 1px solid var(--line); } .footer-text { font-size: var(--text-base); color: var(--muted); line-height: 1.45; font-weight: 400; } .footer-row { display: flex; justify-content: space-between; align-items: baseline; gap: 20px; } /* ======================================== QR BOX ======================================== */ .qr-box { display: flex; flex-direction: column; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; gap: 12px; } .qr-header { text-align: center; } .qr-title { font-size: var(--text-lg); font-weight: 600; color: var(--fg-strong); margin-bottom: 6px; letter-spacing: -0.01em; } .qr-subtitle { font-size: var(--text-sm); color: var(--muted); font-weight: 400; } .qr-code-wrapper { flex: 1; display: flex; align-items: center; justify-content: center; background: #ffffff; border-radius: var(--radius-sm); border: 1px dashed #ddd; padding: 16px; min-height: 180px; } .qr-code-wrapper img { width: 100%; max-width: 180px; height: auto; aspect-ratio: 1; } /* QR Placeholder */ .qr-placeholder { width: 140px; height: 140px; background: repeating-linear-gradient( 0deg, #e0e0e0, #e0e0e0 12px, transparent 12px, transparent 16px ), repeating-linear-gradient( 90deg, #e0e0e0, #e0e0e0 12px, transparent 12px, transparent 16px ); opacity: 0.5; border-radius: 8px; } .qr-contact { font-size: var(--text-sm); color: var(--muted); text-align: center; line-height: 1.5; font-weight: 400; } /* ======================================== DISCLAIMER ======================================== */ .disclaimer { font-size: var(--text-xs); color: var(--muted-light); margin-top: 12px; font-weight: 400; letter-spacing: 0.01em; } /* ======================================== ANIMATIONS (for player integration) ======================================== */ .slide.fade-in { animation: fadeIn 0.6s ease-out forwards; } .slide.fade-out { animation: fadeOut 0.6s ease-in forwards; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } /* ======================================== UTILITY CLASSES ======================================== */ .text-accent { color: var(--accent); } .text-muted { color: var(--muted); } .font-bold { font-weight: 700; } .font-semibold { font-weight: 600; } .mt-auto { margin-top: auto; }