.timeline-wrap { --minute-width: 2px; margin-bottom: 28px; overflow-x: auto; border: 1px solid var(--border); border-radius: 18px; background: var(--panel); cursor: grab; user-select: none; } .timeline-wrap.dragging { cursor: grabbing; } .timeline { min-width: calc(180px + 1440 * var(--minute-width)); } .timeline-header, .timeline-row { display: grid; grid-template-columns: 180px calc(1440 * var(--minute-width)); } .timeline-header { position: sticky; top: 0; z-index: 5; background: var(--panel-2); border-bottom: 1px solid var(--border); } .timeline-channel-head, .timeline-channel { position: sticky; left: 0; z-index: 4; background: var(--panel-2); border-right: 1px solid var(--border); } .timeline-channel-head { padding: 12px 14px; font-weight: 800; color: var(--muted); } .timeline-hours { position: relative; height: 46px; background-image: repeating-linear-gradient( to right, rgba(148, 163, 184, 0.28) 0, rgba(148, 163, 184, 0.28) 1px, transparent 1px, transparent calc(60 * var(--minute-width)) ), repeating-linear-gradient( to right, transparent 0, transparent calc(30 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.16) calc(30 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.16) calc(30 * var(--minute-width)), transparent calc(30 * var(--minute-width)), transparent calc(60 * var(--minute-width)) ), repeating-linear-gradient( to right, transparent 0, transparent calc(15 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.07) calc(15 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.07) calc(15 * var(--minute-width)), transparent calc(15 * var(--minute-width)), transparent calc(30 * var(--minute-width)) ); } .timeline-hour { position: absolute; top: 12px; transform: translateX(6px); color: var(--muted); font-size: 0.8rem; font-weight: 800; } .timeline-row { min-height: 72px; border-bottom: 1px solid var(--border); } .timeline-channel { display: flex; align-items: center; justify-content: flex-start; gap: 8px; padding: 12px 14px; font-weight: 800; } .timeline-programmes { position: relative; min-height: 72px; background-image: repeating-linear-gradient( to right, rgba(148, 163, 184, 0.18) 0, rgba(148, 163, 184, 0.18) 1px, transparent 1px, transparent calc(60 * var(--minute-width)) ), repeating-linear-gradient( to right, transparent 0, transparent calc(30 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.10) calc(30 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.10) calc(30 * var(--minute-width)), transparent calc(30 * var(--minute-width)), transparent calc(60 * var(--minute-width)) ), repeating-linear-gradient( to right, transparent 0, transparent calc(15 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.045) calc(15 * var(--minute-width) - 1px), rgba(148, 163, 184, 0.045) calc(15 * var(--minute-width)), transparent calc(15 * var(--minute-width)), transparent calc(30 * var(--minute-width)) ); } .timeline-programme { position: absolute; top: 9px; left: calc(var(--start) * var(--minute-width)); width: calc(var(--duration) * var(--minute-width)); height: 54px; overflow: hidden; border-radius: 12px; padding: 8px 10px; background: var(--panel-3); border: 1px solid rgba(148, 163, 184, 0.25); color: var(--text); cursor: pointer; transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.12s ease; } .timeline-programme:hover { transform: scale(1.015); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.35); z-index: 20; } .timeline-programme strong { display: block; font-size: 0.85rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .timeline-programme span { display: block; margin-top: 3px; color: var(--muted); font-size: 0.75rem; } .timeline-programme.is-past { opacity: 0.55; } .timeline-zoom { display: flex; gap: 8px; flex-wrap: wrap; } .timeline-zoom button { background: var(--panel-2); border: 1px solid var(--border); color: var(--text); padding: 9px 12px; } .timeline-zoom button.active { background: var(--accent); border-color: var(--accent); }