/* ═══════════════════════════════════════════ GRID VIEW (desktop / tablet) ═══════════════════════════════════════════ */ .grid-wrapper { flex: 1; display: flex; overflow: hidden; position: relative; min-height: 0; } .channels-col { width: var(--channel-w); flex-shrink: 0; background: var(--surface); border-right: 1px solid var(--border-bright); z-index: 10; display: flex; flex-direction: column; min-height: 0; } .channels-col-header { height: var(--header-h); border-bottom: 1px solid var(--border-bright); display: flex; align-items: center; padding: 0 12px; flex-shrink: 0; } .channels-col-header span { font-family: 'Share Tech Mono', monospace; font-size: 9px; color: var(--text-dim); letter-spacing: 0.15em; text-transform: uppercase; } .channels-list { overflow-y: auto; flex: 1; scrollbar-width: none; } .channels-list::-webkit-scrollbar { display: none; } .channel-cell { height: var(--row-h); border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 12px; gap: 8px; flex-shrink: 0; } .channel-logo { width: 32px; height: 32px; border-radius: 4px; object-fit: contain; background: var(--surface2); flex-shrink: 0; } .channel-logo-placeholder { width: 32px; height: 32px; border-radius: 4px; background: var(--surface2); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; font-family: 'Share Tech Mono', monospace; font-size: 9px; color: var(--text-dim); flex-shrink: 0; } .channel-name { font-size: 12px; font-weight: 600; color: var(--text-bright); letter-spacing: 0.04em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-transform: uppercase; } .timeline-area { flex: 1; overflow: auto; position: relative; min-height: 0; scrollbar-width: thin; scrollbar-color: var(--border-bright) transparent; } .timeline-area::-webkit-scrollbar { height: 4px; width: 4px; } .timeline-area::-webkit-scrollbar-track { background: transparent; } .timeline-area::-webkit-scrollbar-thumb { background: var(--border-bright); border-radius: 2px; } /* Conteneur unique — ruler + programmes scrollent ensemble */ .timeline-inner { position: relative; display: block; min-width: 100%; } .time-ruler { height: var(--header-h); background: var(--surface); border-bottom: 1px solid var(--border-bright); position: sticky; top: 0; z-index: 20; } .time-ruler-inner { position: relative; height: 100%; } .time-tick { position: absolute; bottom: 0; display: flex; flex-direction: column; align-items: flex-start; } .time-tick-label { font-family: 'Share Tech Mono', monospace; font-size: 10px; color: var(--text-dim); letter-spacing: 0.08em; padding: 0 6px 6px; white-space: nowrap; } .time-tick-label.hour { color: var(--text); font-size: 12px; } .time-tick-line { width: 1px; height: 8px; background: var(--border-bright); } .time-tick-line.hour { height: 14px; } .now-line { position: absolute; top: 0; width: 2px; height: 100%; background: var(--accent-live); z-index: 50; pointer-events: none; } .now-line::before { content: ''; position: absolute; top: 0; left: -4px; width: 10px; height: 10px; background: var(--accent-live); border-radius: 50%; } .programs-inner { position: relative; background-image: repeating-linear-gradient( to bottom, transparent 0px, transparent 79px, var(--border) 79px, var(--border) 80px ); } .program-row { height: var(--row-h); border-bottom: 1px solid var(--border); position: absolute; left: 0; right: 0; } .program-block { position: absolute; top: 5px; bottom: 5px; background: var(--surface2); border: 1px solid var(--border); border-radius: 3px; padding: 0 8px; display: flex; flex-direction: column; justify-content: center; overflow: hidden; cursor: default; transition: background 0.12s, border-color 0.12s; min-width: 2px; } .program-block:hover { background: var(--surface); border-color: var(--accent2); z-index: 5; } .program-block.is-live { border-color: var(--accent2); background: #0d1a2e; } .program-block.is-live::after { content: ''; position: absolute; bottom: 0; left: 0; height: 2px; background: var(--accent2); width: var(--progress, 0%); transition: width 1s linear; } .program-block.is-past { opacity: 0.35; } .program-title { font-size: 12px; font-weight: 600; color: var(--text-bright); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; letter-spacing: 0.02em; } .program-time { font-family: 'Share Tech Mono', monospace; font-size: 9px; color: var(--text-dim); letter-spacing: 0.06em; white-space: nowrap; }