/* The Pondering Orb — red/black phosphor CRT theme. All CRT effects are CSS (no WebGL). prefers-reduced-motion kills every animation. */ :root{ --red: #ff2b2b; --red-dim: #b21d1d; --red-deep: #6e0f0f; --red-glow: rgba(255,43,43,.55); --amber: #ff6a3d; --bg: #050102; --panel: #120406; --panel-2: #1a0608; --line: #3a0d0f; --ink: #ffd9d4; /* warm off-white text on red/black */ --ink-dim: #c98b86; --seg-on: #ff2b2b; --seg-off: #2a0809; --focus: #ff2b2b; --osd-bg: rgba(10,1,2,.82); --ease: cubic-bezier(.2,.7,.2,1); } *{box-sizing:border-box} html,body{margin:0;height:100%;background:var(--bg);color:var(--ink); font-family:"Consolas","DejaVu Sans Mono","Courier New",monospace;overflow:hidden} body{line-height:1.4} button{font-family:inherit;color:inherit} img{display:block} /* ===================== layout root ===================== */ .orb-root{position:fixed;inset:0;display:flex;flex-direction:column;background:radial-gradient(120% 90% at 50% 0%, #160406 0%, var(--bg) 70%)} /* ===================== the screen ===================== */ .screen{position:relative;flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center; padding:clamp(8px,2vw,28px);transition:padding .25s var(--ease)} .bezel{position:relative;width:100%;height:100%;max-width:100%;max-height:100%;aspect-ratio:16/9; margin:auto;background:#000;border-radius:18px/26px;overflow:hidden; box-shadow:0 0 0 2px #240608, 0 0 0 10px #0c0203, 0 0 60px rgba(0,0,0,.9), inset 0 0 120px rgba(0,0,0,.9);} .video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000} /* ambient backlight canvas sits BEHIND the bezel */ .ambient{position:absolute;inset:0;width:100%;height:100%; filter:blur(60px) saturate(1.7);transform:scale(1.18);opacity:0; transition:opacity .5s var(--ease);pointer-events:none;z-index:0} .orb-root[data-mode-ambient="true"] .ambient{opacity:.85} .screen{z-index:1} /* ---- CRT overlays ---- */ .crt-scan{position:absolute;inset:0;pointer-events:none;z-index:6; background:repeating-linear-gradient(to bottom, rgba(0,0,0,0) 0, rgba(0,0,0,0) 2px, rgba(0,0,0,.16) 3px)} .crt-vignette{position:absolute;inset:0;pointer-events:none;z-index:6; background:radial-gradient(120% 120% at 50% 50%, rgba(0,0,0,0) 55%, rgba(0,0,0,.55) 100%); animation:breathe 4s ease-in-out infinite} @keyframes breathe{0%,100%{transform:scale(1);opacity:.85}50%{transform:scale(1.012);opacity:1}} /* ===================== OSD (shared) ===================== */ .osd{position:absolute;z-index:7;background:var(--osd-bg);border:1px solid var(--line); color:var(--ink);backdrop-filter:blur(2px);box-shadow:0 0 18px rgba(0,0,0,.7)} .osd[hidden]{display:none} /* channel banner */ .osd-channel{left:18px;bottom:18px;display:flex;gap:14px;align-items:center;padding:12px 16px;border-radius:8px; min-width:300px;max-width:70%;opacity:0;transform:translateY(8px) scale(.98); transition:opacity .3s var(--ease),transform .3s var(--ease)} .osd-channel.show{opacity:1;transform:none} .osd-logo{width:96px;height:54px;object-fit:contain;background:#000;border:1px solid var(--line);border-radius:4px} .osd-meta{min-width:0;flex:1} .osd-line1{display:flex;align-items:baseline;gap:10px} .osd-num{font-weight:bold;color:var(--red);font-size:26px;text-shadow:0 0 10px var(--red-glow)} .osd-name{font-size:18px;font-weight:bold;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .osd-now{color:var(--ink-dim);font-size:13px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .osd-prog{height:4px;background:var(--seg-off);border-radius:2px;margin-top:7px;overflow:hidden} .osd-prog-fill{display:block;height:100%;width:0;background:var(--red);box-shadow:0 0 8px var(--red-glow)} .osd-live{display:flex;align-items:center;gap:6px;color:var(--red);font-weight:bold;font-size:13px;align-self:flex-start} /* number entry (7-seg look) */ .osd-number{right:22px;top:22px;padding:8px 14px;border-radius:6px} .seg{font-weight:bold;font-size:40px;letter-spacing:6px;color:var(--seg-on); text-shadow:0 0 14px var(--red-glow);font-variant-numeric:tabular-nums} .live-dot{width:9px;height:9px;border-radius:50%;background:var(--red);box-shadow:0 0 8px var(--red); display:inline-block;animation:pulse 2s ease-in-out infinite} @keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}} /* ===================== scrying static ===================== */ .static{position:absolute;inset:0;width:100%;height:100%;z-index:5;opacity:0;pointer-events:none; transition:opacity .12s linear} .static.show{opacity:.9} /* ===================== buffering / tuning ===================== */ /* Corner hint shown while