.timeline-wrap{flex:1;overflow-y:auto;overflow-x:auto;position:relative;-webkit-overflow-scrolling:touch;min-width:0}
.conflict-banner{
  position:sticky;top:0;z-index:30;padding:8px 16px;
  background:#EF444420;border-bottom:1px solid #EF444460;
  color:#EF4444;font-size:.82rem;font-weight:600;display:none;
  align-items:center;gap:6px;
}
.conflict-banner.show{display:flex}
.timeline{position:relative;margin-left:56px;min-height:1360px}
.hour-line{position:absolute;left:0;right:0;border-top:1px solid var(--border);pointer-events:none}
.hour-label{
  position:absolute;left:-52px;font-size:.72rem;color:var(--text2);
  transform:translateY(-50%);width:44px;text-align:right;
  z-index:25;background:var(--bg);padding:0 2px;
}
.ev-block{
  position:absolute;border-radius:8px;padding:6px 8px;
  cursor:pointer;overflow:hidden;transition:box-shadow .2s,background .2s;
  border-left:3px solid;min-height:24px;z-index:10;
}
.ev-block:hover{box-shadow:var(--shadow);z-index:20!important}
.ev-block .ev-name{font-size:.78rem;font-weight:600;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ev-block .ev-time{font-size:.68rem;color:var(--text2);margin-top:2px}
.ev-block .ev-fav{
  position:absolute;top:4px;right:4px;font-size:.82rem;opacity:.5;
  cursor:pointer;transition:all .15s;z-index:5;background:none;
  padding:2px;line-height:1;
}
.ev-block .ev-fav:hover,.ev-block .ev-fav.on{opacity:1;color:#EAB308}
.ev-block.fav{border-left-width:4px}
.ev-block.fav .ev-fav{opacity:1;color:#EAB308}
.ev-block.conflict{border:2px dashed #EF4444!important;animation:conflict-pulse 2s infinite}
@keyframes conflict-pulse{
  0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,0)}
  50%{box-shadow:0 0 0 4px rgba(239,68,68,.18)}
}
