/* the page is the whole document here, not a component inside a framework */ * { box-sizing: border-box; } html, body { margin: 0; padding: 0; } body { background: #ffffff; color: #111111; font-family: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif; -webkit-font-smoothing: antialiased; } .tts-page { max-width: 1080px; margin: 0 auto; padding: 26px 24px 30px; } @media (max-width: 600px) { .tts-page { padding: 18px 14px 22px; } } .tts-chart { --tts-series: #ff9d00; --tts-wash: rgba(255, 157, 0, 0.14); --tts-brand: #ffd21e; --tts-ink: #111111; --tts-ink-2: #5b5952; --tts-muted: #8c8a82; --tts-grid: #ece9e1; --tts-axis: #cfccc2; --tts-hairline: rgba(17, 17, 17, 0.10); --tts-surface: #ffffff; --tts-shadow: rgba(17, 17, 17, 0.18); font-family: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--tts-ink); } .dark .tts-chart { --tts-series: #ff9d00; --tts-wash: rgba(255, 157, 0, 0.16); --tts-ink: #ffffff; --tts-ink-2: #c3c2b7; --tts-muted: #8c8a82; --tts-grid: #2c2c2a; --tts-axis: #3a3a37; --tts-hairline: rgba(255, 255, 255, 0.11); --tts-surface: #232321; --tts-shadow: rgba(0, 0, 0, 0.6); } .tts-chart h1 { margin-bottom: 4px; } .tts-eyebrow { display: flex; align-items: center; gap: 9px; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--tts-muted); } .tts-mark { width: 11px; height: 11px; border-radius: 3px; flex: none; background: var(--tts-brand); border: 1px solid var(--tts-hairline); } .tts-chart h1 { font-size: 23px; font-weight: 600; letter-spacing: -0.012em; margin: 0; color: var(--tts-ink); } .tts-totals { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; font-size: 16px; color: var(--tts-ink-2); margin-bottom: 20px; } .tts-asof { font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-size: 14px; color: var(--tts-muted); } .tts-totals strong { font-size: 20px; font-weight: 600; color: var(--tts-ink); font-variant-numeric: tabular-nums; } .tts-sep { color: var(--tts-axis); } .tts-plot { overflow-x: auto; } .tts-svg { display: block; width: 100%; min-width: 420px; height: auto; } .tts-bar { transition: opacity 90ms linear; } .tts-svg:hover .tts-bar { opacity: 0.45; } /* Hover slots: one per month, drawn above the columns. The highlight path is a copy of the column so the hovered one stays at full strength while the rest dim; the tooltip is real SVG revealed by :hover, because gr.HTML strips scripts and a JS tooltip would never run. */ .tts-slot { cursor: pointer; outline: none; } .tts-bar-hi, .tts-cross, .tts-tip { opacity: 0; pointer-events: none; } .tts-slot:hover .tts-bar-hi, .tts-slot:is(:focus-visible,.is-pinned) .tts-bar-hi { opacity: 1; } .tts-slot:hover .tts-cross, .tts-slot:is(:focus-visible,.is-pinned) .tts-cross { opacity: 1; } .tts-slot:hover .tts-tip, .tts-slot:is(:focus-visible,.is-pinned) .tts-tip { opacity: 1; } /* Click (or tab) to a month and its box stays put so the model links inside are reachable; while one is pinned, passing the cursor over other months must not swap the box out from under the pointer. */ .tts-svg:has(.tts-slot:is(:focus-visible,.is-pinned)) .tts-slot:hover .tts-tip { opacity: 0; } .tts-svg:has(.tts-slot:is(:focus-visible,.is-pinned)) .tts-slot:is(:focus-visible,.is-pinned) .tts-tip { opacity: 1; } .tts-svg:has(.tts-slot:is(:focus-visible,.is-pinned)) .tts-slot:hover .tts-bar-hi, .tts-svg:has(.tts-slot:is(:focus-visible,.is-pinned)) .tts-slot:hover .tts-cross { opacity: 0; } .tts-svg:has(.tts-slot:is(:focus-visible,.is-pinned)) .tts-slot:is(:focus-visible,.is-pinned) .tts-bar-hi, .tts-svg:has(.tts-slot:is(:focus-visible,.is-pinned)) .tts-slot:is(:focus-visible,.is-pinned) .tts-cross { opacity: 1; } .tts-svg:has(.tts-slot:is(:focus-visible,.is-pinned)) .tts-bar { opacity: 0.45; } .tts-tip-eyebrow { fill: var(--tts-muted); font-size: 8.5px; letter-spacing: 0.1em; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; } .tts-tip-link text { fill: var(--tts-ink); font-size: 11.5px; font-weight: 500; text-decoration: underline; text-underline-offset: 2px; } .tts-tip-link:hover text { fill: var(--tts-series); } .tts-cross { stroke: var(--tts-axis); stroke-width: 1; } .tts-tip-box { fill: var(--tts-surface); stroke: var(--tts-hairline); stroke-width: 1; filter: drop-shadow(0 2px 6px var(--tts-shadow)); } .tts-tip-swatch { fill: var(--tts-series); } .tts-tip-title { fill: var(--tts-ink); font-size: 21px; font-weight: 600; } .tts-tip-label { fill: var(--tts-ink-2); font-size: 19px; } .tts-tip-value { fill: var(--tts-ink); font-size: 19px; font-weight: 500; text-anchor: end; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-variant-numeric: tabular-nums; } .tts-tip-rule { stroke: var(--tts-hairline); stroke-width: 1; } .tts-tip-note { fill: var(--tts-ink-2); font-size: 18px; } @media (prefers-reduced-motion: reduce) { .tts-bar-hi, .tts-cross, .tts-tip { transition: none; } } .tts-tick { fill: var(--tts-muted); font-size: 22px; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-variant-numeric: tabular-nums; } .tts-anno { fill: var(--tts-ink-2); font-size: 11.5px; } .tts-anno-sub { fill: var(--tts-muted); font-size: 11px; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; } .tts-foot { font-size: 12.5px; color: var(--tts-muted); margin: 12px 0 0; max-width: 80ch; } /* Release pins: a hairline dropped at the release date, numbered at the top. The key below resolves the numbers — several releases land within weeks of each other, so names on the plot would collide. */ .tts-rel-stem { stroke: var(--tts-axis); stroke-width: 1; opacity: 0.55; } .tts-rel-pin { fill: var(--tts-surface); stroke: var(--tts-axis); stroke-width: 1; } .tts-rel-num { fill: var(--tts-ink-2); font-size: 9.5px; text-anchor: middle; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; } /* ---- release stream --------------------------------------------------- */ /* Each logo is absolutely placed at its release date as a percentage of the 1040-unit viewBox, so it tracks the chart at any width. Logos overlap where releases cluster; the surface ring keeps them separable, and hover raises the one under the cursor above its neighbours. */ .tts-stream { position: relative; height: 52px; margin: 22px 0 0; min-width: 420px; } .tts-rel { position: absolute; left: var(--x); top: 6px; transform: translateX(-50%); width: 32px; height: 32px; text-decoration: none; transition: left 240ms cubic-bezier(.2,.8,.3,1); } .tts-rel::before { content: ""; position: absolute; left: 50%; width: 1px; top: -22px; height: 22px; background: var(--tts-axis); opacity: 0.3; transition: background-color 160ms linear, opacity 160ms linear; } .tts-av { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; display: block; background: var(--tts-grid); border: 2px solid var(--tts-surface); box-shadow: 0 0 0 1px var(--tts-hairline); transition: transform 180ms cubic-bezier(.2,.8,.3,1), border-color 180ms linear; transform-origin: center bottom; } .tts-rel:hover { z-index: 20; } .tts-rel:hover .tts-av, .tts-rel:focus-visible .tts-av { transform: translateY(-5px) scale(1.5); border-color: var(--tts-series); } .tts-rel:hover::before { background: var(--tts-series); opacity: 1; } /* hover card, floated above the logo over the chart's lower band */ .tts-card { position: absolute; bottom: calc(100% + 18px); left: 50%; transform: translateX(-50%) translateY(6px); display: flex; flex-direction: column; gap: 3px; min-width: 330px; padding: 18px 22px; background: var(--tts-surface); border: 1px solid var(--tts-hairline); border-radius: 10px; box-shadow: 0 8px 30px var(--tts-shadow); opacity: 0; pointer-events: none; transition: opacity 140ms linear, transform 180ms cubic-bezier(.2,.8,.3,1); } .tts-card-start .tts-card { left: 0; transform: translateX(0) translateY(4px); } .tts-card-end .tts-card { left: auto; right: 0; transform: translateX(0) translateY(4px); } .tts-rel:hover .tts-card, .tts-rel:focus-visible .tts-card { opacity: 1; transform: translateX(-50%) translateY(0); } .tts-card-start:hover .tts-card, .tts-card-end:hover .tts-card { transform: translateX(0) translateY(0); } .tts-card-name { font-size: 24px; font-weight: 600; letter-spacing: -0.015em; color: var(--tts-ink); line-height: 1.15; } .tts-card-id { font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-size: 15px; color: var(--tts-ink-2); overflow-wrap: anywhere; } .tts-card-meta { display: flex; justify-content: space-between; gap: 20px; margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--tts-hairline); font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-size: 14px; color: var(--tts-muted); white-space: nowrap; } .tts-stream-cap { margin: 6px 0 0; padding-left: var(--x0, 5.385%); font-size: 14px; color: var(--tts-muted); } .tts-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } @media (prefers-reduced-motion: reduce) { .tts-av, .tts-card { transition: none; } } .tts-sub { margin-top: 30px; border-top: 1px solid var(--tts-hairline); padding-top: 18px; } .tts-sub h2 { font-size: 14px; font-weight: 600; margin: 0 0 4px; color: var(--tts-ink); } .tts-sub > p { margin: 0 0 10px; font-size: 12.5px; color: var(--tts-ink-2); max-width: 84ch; } .tts-svg-sub { min-width: 640px; } .tts-bar-sub { opacity: 0.85; } .tts-bar-sub:hover { opacity: 1; } .tts-key { margin-top: 22px; border-top: 1px solid var(--tts-hairline); padding-top: 16px; } .tts-key h2 { font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--tts-muted); margin: 0 0 14px; font-weight: 500; } .tts-key ol { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(240px, 1fr)); gap: 11px 28px; } .tts-key li { display: grid; grid-template-columns: 18px minmax(0, 1fr); column-gap: 9px; row-gap: 1px; font-size: 12.5px; align-items: start; } .tts-key-num { grid-row: span 2; width: 17px; height: 17px; border-radius: 50%; margin-top: 1px; border: 1px solid var(--tts-axis); color: var(--tts-muted); display: inline-flex; align-items: center; justify-content: center; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-size: 9.5px; } .tts-key-head { display: flex; align-items: baseline; gap: 8px; min-width: 0; } .tts-key-date { font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; font-size: 11px; color: var(--tts-muted); white-space: nowrap; } .tts-key-label { font-weight: 600; color: var(--tts-ink); overflow-wrap: anywhere; } .tts-key-sub { display: flex; align-items: baseline; gap: 8px; min-width: 0; flex-wrap: wrap; } .tts-key-id { color: var(--tts-ink-2); font-size: 11px; text-decoration: none; overflow-wrap: anywhere; border-bottom: 1px solid transparent; font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace; } .tts-key-id:hover { border-bottom-color: var(--tts-series); color: var(--tts-ink); } .tts-key-stat { color: var(--tts-muted); font-size: 11px; white-space: nowrap; font-variant-numeric: tabular-nums; } .tts-key-foot { font-size: 11.5px; color: var(--tts-muted); margin: 16px 0 0; max-width: 92ch; } @media (max-width: 1040px) { .tts-key ol { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 780px) { .tts-key ol { grid-template-columns: 1fr; } } @media (prefers-reduced-motion: reduce) { .tts-bar { transition: none; } } .tts-plot:has(.tts-slot-202210:hover) .tts-rel-202210,.tts-plot:has(.tts-slot-202210.is-pinned) .tts-rel-202210{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202210:hover) .tts-rel-202210 .tts-av,.tts-plot:has(.tts-slot-202210.is-pinned) .tts-rel-202210 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202210:hover) .tts-rel-202210::before,.tts-plot:has(.tts-slot-202210.is-pinned) .tts-rel-202210::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202210:hover) .tts-slot-202210 .tts-bar-hi,.tts-plot:has(.tts-rel-202210:hover) .tts-slot-202210 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202211:hover) .tts-rel-202211,.tts-plot:has(.tts-slot-202211.is-pinned) .tts-rel-202211{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202211:hover) .tts-rel-202211 .tts-av,.tts-plot:has(.tts-slot-202211.is-pinned) .tts-rel-202211 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202211:hover) .tts-rel-202211::before,.tts-plot:has(.tts-slot-202211.is-pinned) .tts-rel-202211::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202211:hover) .tts-slot-202211 .tts-bar-hi,.tts-plot:has(.tts-rel-202211:hover) .tts-slot-202211 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202309:hover) .tts-rel-202309,.tts-plot:has(.tts-slot-202309.is-pinned) .tts-rel-202309{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202309:hover) .tts-rel-202309 .tts-av,.tts-plot:has(.tts-slot-202309.is-pinned) .tts-rel-202309 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202309:hover) .tts-rel-202309::before,.tts-plot:has(.tts-slot-202309.is-pinned) .tts-rel-202309::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202309:hover) .tts-slot-202309 .tts-bar-hi,.tts-plot:has(.tts-rel-202309:hover) .tts-slot-202309 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202402:hover) .tts-rel-202402,.tts-plot:has(.tts-slot-202402.is-pinned) .tts-rel-202402{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202402:hover) .tts-rel-202402 .tts-av,.tts-plot:has(.tts-slot-202402.is-pinned) .tts-rel-202402 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202402:hover) .tts-rel-202402::before,.tts-plot:has(.tts-slot-202402.is-pinned) .tts-rel-202402::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202402:hover) .tts-slot-202402 .tts-bar-hi,.tts-plot:has(.tts-rel-202402:hover) .tts-slot-202402 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202407:hover) .tts-rel-202407,.tts-plot:has(.tts-slot-202407.is-pinned) .tts-rel-202407{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202407:hover) .tts-rel-202407 .tts-av,.tts-plot:has(.tts-slot-202407.is-pinned) .tts-rel-202407 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202407:hover) .tts-rel-202407::before,.tts-plot:has(.tts-slot-202407.is-pinned) .tts-rel-202407::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202407:hover) .tts-slot-202407 .tts-bar-hi,.tts-plot:has(.tts-rel-202407:hover) .tts-slot-202407 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202503:hover) .tts-rel-202503,.tts-plot:has(.tts-slot-202503.is-pinned) .tts-rel-202503{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202503:hover) .tts-rel-202503 .tts-av,.tts-plot:has(.tts-slot-202503.is-pinned) .tts-rel-202503 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202503:hover) .tts-rel-202503::before,.tts-plot:has(.tts-slot-202503.is-pinned) .tts-rel-202503::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202503:hover) .tts-slot-202503 .tts-bar-hi,.tts-plot:has(.tts-rel-202503:hover) .tts-slot-202503 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202504:hover) .tts-rel-202504,.tts-plot:has(.tts-slot-202504.is-pinned) .tts-rel-202504{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202504:hover) .tts-rel-202504 .tts-av,.tts-plot:has(.tts-slot-202504.is-pinned) .tts-rel-202504 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202504:hover) .tts-rel-202504::before,.tts-plot:has(.tts-slot-202504.is-pinned) .tts-rel-202504::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202504:hover) .tts-slot-202504 .tts-bar-hi,.tts-plot:has(.tts-rel-202504:hover) .tts-slot-202504 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202505:hover) .tts-rel-202505,.tts-plot:has(.tts-slot-202505.is-pinned) .tts-rel-202505{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202505:hover) .tts-rel-202505 .tts-av,.tts-plot:has(.tts-slot-202505.is-pinned) .tts-rel-202505 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202505:hover) .tts-rel-202505::before,.tts-plot:has(.tts-slot-202505.is-pinned) .tts-rel-202505::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202505:hover) .tts-slot-202505 .tts-bar-hi,.tts-plot:has(.tts-rel-202505:hover) .tts-slot-202505 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202507:hover) .tts-rel-202507,.tts-plot:has(.tts-slot-202507.is-pinned) .tts-rel-202507{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202507:hover) .tts-rel-202507 .tts-av,.tts-plot:has(.tts-slot-202507.is-pinned) .tts-rel-202507 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202507:hover) .tts-rel-202507::before,.tts-plot:has(.tts-slot-202507.is-pinned) .tts-rel-202507::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202507:hover) .tts-slot-202507 .tts-bar-hi,.tts-plot:has(.tts-rel-202507:hover) .tts-slot-202507 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202509:hover) .tts-rel-202509,.tts-plot:has(.tts-slot-202509.is-pinned) .tts-rel-202509{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202509:hover) .tts-rel-202509 .tts-av,.tts-plot:has(.tts-slot-202509.is-pinned) .tts-rel-202509 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202509:hover) .tts-rel-202509::before,.tts-plot:has(.tts-slot-202509.is-pinned) .tts-rel-202509::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202509:hover) .tts-slot-202509 .tts-bar-hi,.tts-plot:has(.tts-rel-202509:hover) .tts-slot-202509 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202512:hover) .tts-rel-202512,.tts-plot:has(.tts-slot-202512.is-pinned) .tts-rel-202512{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202512:hover) .tts-rel-202512 .tts-av,.tts-plot:has(.tts-slot-202512.is-pinned) .tts-rel-202512 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202512:hover) .tts-rel-202512::before,.tts-plot:has(.tts-slot-202512.is-pinned) .tts-rel-202512::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202512:hover) .tts-slot-202512 .tts-bar-hi,.tts-plot:has(.tts-rel-202512:hover) .tts-slot-202512 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202602:hover) .tts-rel-202602,.tts-plot:has(.tts-slot-202602.is-pinned) .tts-rel-202602{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202602:hover) .tts-rel-202602 .tts-av,.tts-plot:has(.tts-slot-202602.is-pinned) .tts-rel-202602 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202602:hover) .tts-rel-202602::before,.tts-plot:has(.tts-slot-202602.is-pinned) .tts-rel-202602::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202602:hover) .tts-slot-202602 .tts-bar-hi,.tts-plot:has(.tts-rel-202602:hover) .tts-slot-202602 .tts-cross{opacity:1} .tts-plot:has(.tts-slot-202609:hover) .tts-rel-202609,.tts-plot:has(.tts-slot-202609.is-pinned) .tts-rel-202609{z-index:5;left:calc(var(--xc) + var(--off))} .tts-plot:has(.tts-slot-202609:hover) .tts-rel-202609 .tts-av,.tts-plot:has(.tts-slot-202609.is-pinned) .tts-rel-202609 .tts-av{transform:translateY(-5px) scale(1.5);border-color:var(--tts-series)} .tts-plot:has(.tts-slot-202609:hover) .tts-rel-202609::before,.tts-plot:has(.tts-slot-202609.is-pinned) .tts-rel-202609::before{background:var(--tts-series);opacity:1} .tts-plot:has(.tts-rel-202609:hover) .tts-slot-202609 .tts-bar-hi,.tts-plot:has(.tts-rel-202609:hover) .tts-slot-202609 .tts-cross{opacity:1}