/* === Sunbeam Display Engine === */ * { margin: 0; padding: 0; box-sizing: border-box; } html, body { width: 100%; height: 100%; overflow: hidden; background: #fff; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif; color: #000000; cursor: none; } /* === Scaling Wrapper — keeps aspect ratio, scales to fit screen === */ #scale-wrapper { width: var(--display-width); height: var(--display-height); position: absolute; top: 50%; left: 50%; transform-origin: center center; } /* === Slide Container === */ #display-container { position: relative; width: 100%; height: 100%; } /* === Slide Layers === */ .slide-layer { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 1s ease-in-out; z-index: 1; overflow: hidden; } .slide-layer.active { opacity: 1; z-index: 2; } body[data-transition="slide"] .slide-layer { transition: transform 0.8s ease-in-out, opacity 0.6s ease-in-out; transform: translateX(100%); } body[data-transition="slide"] .slide-layer.active { transform: translateX(0); } body[data-transition="slide"] .slide-layer.slide-out { transform: translateX(-100%); } body[data-transition="none"] .slide-layer { transition: none; } /* === Slide Content === */ .slide-inner { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background-size: cover; background-position: center; background-repeat: no-repeat; } .slide-inner .content-wrap { width: 100%; height: 100%; overflow: hidden; } .slide-inner h1 { font-size: 3em; font-weight: 700; } .slide-inner h2 { font-size: 2.2em; font-weight: 600; } .slide-inner h3 { font-size: 1.6em; font-weight: 600; } .slide-inner p { font-size: 1.2em; line-height: 1.6; } .slide-inner img { max-width: 100%; max-height: 100%; object-fit: contain; } .slide-inner table { width: auto; margin: 1em auto; border-collapse: collapse; } .slide-inner table td, .slide-inner table th { padding: 0.6em 1em; border: 1px solid rgba(0, 0, 0, 0.2); } .slide-inner table th { background: rgba(0, 0, 0, 0.05); font-weight: 600; } .slide-inner iframe.embed-frame { width: 100%; height: 100%; border: none; } /* === ICS Calendar === */ .ics-display { width: 100%; height: 100%; padding: 3em; display: flex; flex-direction: column; overflow: hidden; } .ics-display h2 { font-size: 2.4em; font-weight: 700; margin-bottom: 0.8em; display: flex; align-items: center; gap: 0.4em; } .ics-display h2::before { content: '\01F4C5'; } .events-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 1em; flex: 1; overflow: hidden; } .event-card { background: rgba(0, 0, 0, 0.05); border-radius: 12px; padding: 1.2em 1.5em; border-left: 4px solid #f0a030; } .event-card .event-title { font-size: 1.3em; font-weight: 600; margin-bottom: 0.3em; } .event-card .event-time { font-size: 0.95em; opacity: 0.6; margin-bottom: 0.3em; } .event-card .event-location { font-size: 0.9em; opacity: 0.5; } /* === Progress Bar === */ #progress-bar { position: fixed; bottom: 0; left: 0; width: 100%; height: 4px; background: rgba(0, 0, 0, 0.08); z-index: 100; } #progress-fill { height: 100%; width: 0%; background: linear-gradient(90deg, #f0a030, #ff6b6b); transition: width 0.3s linear; } /* === Clock Overlay — centered, larger, dark grey === */ #clock-overlay { position: absolute; bottom: 40px; left: 50%; transform: translateX(-50%); z-index: 50; text-align: center; pointer-events: none; } #clock-time { display: block; font-size: 2.4em; font-weight: 600; color: rgba(80, 80, 80, 0.6); font-variant-numeric: tabular-nums; } #clock-date { display: block; font-size: 1.1em; color: rgba(80, 80, 80, 0.45); } /* === Status Indicator === */ #status-dot { position: fixed; top: 12px; right: 12px; width: 8px; height: 8px; border-radius: 50%; background: #4caf50; z-index: 100; opacity: 0.6; } #status-dot.error { background: #f44336; animation: pulse 1.5s infinite; } @keyframes pulse { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } } /* === Loading / Empty === */ .loading-state { display: flex; align-items: center; justify-content: center; height: 100%; font-size: 1.5em; opacity: 0.5; } .loading-state::after { content: ''; width: 24px; height: 24px; border: 3px solid rgba(0,0,0,0.15); border-top-color: #f0a030; border-radius: 50%; animation: spin 0.8s linear infinite; margin-left: 0.8em; } @keyframes spin { to { transform: rotate(360deg); } } .no-slides { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; text-align: center; } .no-slides h1 { font-size: 3em; margin-bottom: 0.3em; } .no-slides p { font-size: 1.3em; opacity: 0.5; }