Loading files
/* Director panel — overview-plus-focus timeline lanes for knob automation.
The timeline sets two CSS vars: --pps (px per second, the zoom) and
--gridpx (the ruler tick spacing in px); playheads carry --pht (seconds)
so one var move — or a zoom — repositions all of them. */
.body {
flex: 1;
min-height: 0;
overflow: auto;
background: #fffdf8;
outline: none;
}
.timeline {
display: grid;
grid-template-columns: 92px 1fr;
min-width: max-content;
}
.gutterCell {
position: sticky;
left: 0;
z-index: 3;
display: flex;
align-items: center;
padding: 0 8px;
font-size: 12px;
color: #555;
background: #f4efe4;
border-bottom: 1px solid #e2e2e2;
border-right: 1px solid #ddd;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Focused lane header: the lane name up top, the value axis down the side. */
.gutterFocus {
position: sticky;
align-items: flex-start;
padding-top: 4px;
background: #efe9da;
}
.gutterCompact {
cursor: pointer;
opacity: 0.75;
}
.gutterCompact:hover {
opacity: 1;
background: #eee7d7;
}
.laneHead {
display: inline-flex;
align-items: center;
gap: 5px;
min-width: 0;
}
.laneSwatch {
flex: none;
width: 8px;
height: 8px;
border-radius: 2px;
}
.laneName {
overflow: hidden;
text-overflow: ellipsis;
}
.axisLabel {
position: absolute;
right: 6px;
font-size: 10px;
color: #756f64;
font-variant-numeric: tabular-nums;
}
.axisMax {
top: 3px;
}
.axisMid {
top: 50%;
transform: translateY(-50%);
}
.axisMin {
bottom: 3px;
}
.laneCell {
position: relative;
border-bottom: 1px solid #e8e8e8;
background:
repeating-linear-gradient(
to right,
transparent 0,
transparent calc(var(--gridpx) * 1px - 1px),
#efefef calc(var(--gridpx) * 1px - 1px),
#efefef calc(var(--gridpx) * 1px)
);
}
.laneCompact {
cursor: pointer;
}
.laneCompact:hover {
background-color: #f7f3ea;
}
.laneSvg {
display: block;
}
.laneSvgCompact {
opacity: 0.8;
}
.ruler {
position: relative;
height: 20px;
cursor: ew-resize;
user-select: none;
}
.rulerTick {
position: absolute;
top: 2px;
font-size: 10px;
color: #756f64;
transform: translateX(2px);
font-variant-numeric: tabular-nums;
}
.playhead {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 0;
border-left: 2px solid #ff4d00;
transform: translateX(calc(var(--pht, 0) * var(--pps) * 1px));
pointer-events: none;
z-index: 2;
}
/* Horizontal quarter gridlines inside the focused lane. */
.vGrid {
stroke: #e8e8e8;
stroke-width: 1;
}
/* The authored curve — the line you trust (stroke color set per lane). */
.curve {
fill: none;
stroke-width: 2;
stroke-linejoin: round;
}
.curveCompact {
fill: none;
stroke-width: 1.5;
stroke-linejoin: round;
}
/* The flattened v2 wire pieces, overlaid on demand ("wire" toggle). */
.wire {
fill: none;
stroke: #00000055;
stroke-width: 1;
stroke-dasharray: 3 3;
}
.key {
fill: #fff;
stroke-width: 2;
cursor: grab;
}
.keySelected {
fill: #ff4d00;
stroke: #ff4d00 !important;
}
.handleLine {
stroke: #ff4d0088;
stroke-width: 1;
}
.handle {
fill: #ff4d00;
cursor: grab;
}
.msgChip {
position: absolute;
top: 3px;
transform: translateX(-4px);
max-width: 160px;
padding: 1px 6px;
font-size: 10px;
color: #333;
background: #ffe9df;
border: 1px solid #ffc4ab;
border-radius: 3px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
cursor: pointer;
user-select: none;
}
.msgChipSelected {
background: #ff4d00;
border-color: #ff4d00;
color: #fff;
}
.budget {
font-variant-numeric: tabular-nums;
}
.budgetOver {
color: #dc2626;
font-weight: 600;
}
.hint {
padding: 10px 12px;
font-size: 12px;
color: #777;
}
98b423c28This file is pinned to the selected release. Download the original to open it in your design tool.