Spaces:
Running
Running
File size: 6,631 Bytes
5ea40ce 39a61da 5da533e 39a61da 5da533e 39a61da 5da533e 39a61da 5da533e 39a61da | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | /* 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; }
|