/* sequence.css, utilities for any section that displays nucleotide or amino-acid sequences: gene track SVG (used by §1, §3, §5), the .seq- label header (with carbon/reference chips and length tags), the .seq-block monospace box, the .stat-row at the bottom of demos, and small reference-mismatch highlight styles shared by §1 and §5. */ /* --- Gene track + gene-info (shared by §1, §3, §5) --- */ .gene-info { font-family: "JetBrains Mono", monospace; font-size: 11px; color: #666; margin: 4px 0 12px; min-height: 14px; } .gene-info strong { color: #1f1f1d; font-weight: 500; } .gene-track { width: 100%; height: 40px; display: block; margin: 4px 0 8px; } .gene-track.draggable { height: 52px; touch-action: none; } .gene-track .exon { fill: #317f3f; } .gene-track .intron { stroke: #aaa; stroke-width: 1; } .gene-track .playhead { stroke: #bc2e25; stroke-width: 2; } .gene-track .gen-region { fill: #317f3f; opacity: 0.15; } .gene-track .prompt-region { fill: #1f1f1d; opacity: 0.04; } .gene-track .handle { cursor: ew-resize; } .gene-track .handle line { stroke: #1f1f1d; stroke-width: 1.5; } .gene-track .handle polygon { fill: #1f1f1d; } .gene-track .handle:hover line, .gene-track .handle.dragging line { stroke: #000; stroke-width: 2; } .gene-track .handle:hover polygon, .gene-track .handle.dragging polygon { fill: #000; } .gene-track .handle.gen line { stroke: #317f3f; } .gene-track .handle.gen polygon { fill: #317f3f; } .gene-track .handle.gen:hover line, .gene-track .handle.gen.dragging line { stroke: #1f5024; stroke-width: 2; } .gene-track .handle.gen:hover polygon, .gene-track .handle.gen.dragging polygon { fill: #1f5024; } .gene-track text { font-family: "JetBrains Mono", monospace; font-size: 9px; fill: #888; } /* Instant tooltips (no native-title delay) for legend items. */ .legend-tip { position: relative; } .legend-tip:hover::after { content: attr(data-tip); position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%); background: #1f1f1d; color: #f7f5ee; padding: 6px 10px; border-radius: 3px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); font-family: 'Inter', sans-serif; font-size: 11px; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; width: max-content; max-width: 260px; line-height: 1.4; z-index: 10; pointer-events: none; } .legend-tip:hover::before { content: ""; position: absolute; bottom: calc(100% + 2px); left: 50%; transform: translateX(-50%); border: 4px solid transparent; border-top-color: #1f1f1d; z-index: 10; pointer-events: none; } .track-axis-label { font-family: "JetBrains Mono", monospace; font-size: 9px; color: #888; text-transform: uppercase; letter-spacing: 1px; display: flex; justify-content: space-between; margin-top: -4px; } /* --- seq-label header row + chips + length tag (used by §1, §3, §5) --- */ .seq-label { font-family: "JetBrains Mono", monospace; font-size: 9px; color: #888; text-transform: uppercase; letter-spacing: 1.5px; margin-top: 14px; margin-bottom: 4px; display: flex; gap: 12px; align-items: center; } /* Generic colour-swatch chip used in inline legends across the demo (.seq-label, .track-axis-label, etc.). The class is the obvious semantic hook, so the selector is intentionally global rather than nested under a single parent — having the rule scoped to .seq-label broke every other legend that reused the pattern (e.g. the §6 results chart legend), which all rendered as zero-width invisible spans. */ .legend-swatch { display: inline-block; width: 8px; height: 8px; vertical-align: middle; margin-right: 4px; border-radius: 1px; } /* Chart legend variant of .track-axis-label (used by the §6 results bars chart). The base class is mono uppercase 9px which suits a thin axis caption; for a 4-model legend that pattern was hard to read. The variant keeps the demo's typographic system but bumps the legend to sentence-case 12px Inter and gives the swatches more visual weight so they read as a proper colour key rather than caption text. */ .chart-legend { font-family: "Inter", sans-serif; font-size: 12px; text-transform: none; letter-spacing: 0; color: var(--ink, #1f1f1d); padding-top: 16px; gap: 22px; flex-wrap: wrap; align-items: center; justify-content: flex-start; } .chart-legend__item { display: inline-flex; align-items: center; font-weight: 500; } .chart-legend__item .legend-swatch { width: 14px; height: 14px; margin-right: 7px; border-radius: 2px; } /* Inline tag chips used in §5 to disambiguate carbon vs reference rows. Same shape/size, different colour band so the eye instantly maps a row of AAs to the correct identity without re-reading the full label. */ .seq-label .seq-tag { display: inline-block; font-size: 9px; letter-spacing: 1.5px; padding: 1px 6px; margin-right: 8px; border-radius: 2px; text-transform: uppercase; font-weight: 600; } .seq-label .seq-tag.carbon { background: #1f1f1d; color: #f7f5ee; } .seq-label .seq-tag.ref { background: #f0eee5; color: #555; border: 1px solid #d8d5c8; } .seq-label .aa-len-tag { color: #1f1f1d; font-variant-numeric: tabular-nums; text-transform: none; letter-spacing: 0.3px; } /* In-label red stat used by the carbon row (e.g. "· 96 mismatches"). Defined as a class so the JS doesn't have to inline color styles. */ .seq-label .seq-label-stat { color: #b00020; } /* --- stat row at the bottom of every demo --- */ .stat-row { display: flex; flex-wrap: wrap; gap: 24px; margin-top: 14px; padding-top: 12px; border-top: 1px solid #eee; font-family: "JetBrains Mono", monospace; font-size: 11px; } .stat-pair { display: flex; flex-direction: column; gap: 2px; } .stat-pair-label { font-size: 9px; color: #999; text-transform: uppercase; letter-spacing: 1.2px; } .stat-pair-val { color: #1f1f1d; font-variant-numeric: tabular-nums; } .stat-pair-val.muted { color: #aaa; } /* --- Sequence display (shared with sandbox, used outside #panel-sandbox) --- */ .seq-block { font-family: "JetBrains Mono", monospace; background: #f7f7f7; border: 1px solid #e0e0e0; padding: 14px 18px; overflow-x: auto; white-space: pre; font-size: 12px; font-weight: 400; line-height: 1.85; letter-spacing: 1px; } .seq-block.empty { color: #aaa; font-weight: 300; letter-spacing: normal; } .pos { color: #bbb; user-select: none; font-weight: 300; } /* Mismatch highlighting in reference row (§1, §5). */ .ref-mismatch { background: rgba(188, 46, 37, 0.18); color: #b00020; } .ref-match { color: #999; }