/* Ch 12 doppler (C12). Scoped to [data-chapter="doppler"]. Spectrum stops are physical colors (illustrative fit). */
[data-chapter="doppler"] .dp-hook-art{margin:var(--s-3) auto var(--s-4);align-items:center}
[data-chapter="doppler"] .dp-big-q{font-size:46px;fill:var(--ink-muted)}
[data-chapter="doppler"] .dp-face-letter{font-weight:700;font-size:18px}
[data-chapter="doppler"] .dp-fill-light{fill:var(--tint-light);stroke:none}
[data-chapter="doppler"] .dp-ray-key{stroke-width:3.25}
[data-chapter="doppler"] .dp-face-rear{fill:color-mix(in srgb,var(--c-rocket) 42%,var(--surface))}
[data-chapter="doppler"] .dp-face-front{fill:var(--tint-rocket);stroke:none}
[data-chapter="doppler"] .dp-face-plain{fill:var(--surface-2);stroke:none}
[data-chapter="doppler"] .dp-edge-strong{stroke-width:2.75}
[data-chapter="doppler"] .dp-rainbow{fill:url(#dp-rainbow);stroke:var(--rule)}
[data-chapter="doppler"] .dp-line{fill:none;stroke:var(--ink);stroke-width:2.5}
[data-chapter="doppler"] .dp-s380{stop-color:rgb(97,0,97)}
[data-chapter="doppler"] .dp-s410{stop-color:rgb(126,0,219)}
[data-chapter="doppler"] .dp-s440{stop-color:rgb(0,0,255)}
[data-chapter="doppler"] .dp-s465{stop-color:rgb(0,146,255)}
[data-chapter="doppler"] .dp-s490{stop-color:rgb(0,255,255)}
[data-chapter="doppler"] .dp-s510{stop-color:rgb(0,255,0)}
[data-chapter="doppler"] .dp-s545{stop-color:rgb(146,255,0)}
[data-chapter="doppler"] .dp-s580{stop-color:rgb(255,255,0)}
[data-chapter="doppler"] .dp-s612{stop-color:rgb(255,148,0)}
[data-chapter="doppler"] .dp-s645,[data-chapter="doppler"] .dp-s700{stop-color:rgb(255,0,0)}
[data-chapter="doppler"] .dp-s740{stop-color:rgb(181,0,0)}
[data-chapter="doppler"] .dp-s780{stop-color:rgb(97,0,0)}
/* reserve live lab heights (no layout shift on mount); only when scripts run, so no-JS readers get no blank boxes.
   Re-measured in revision 2 at 25 widths (.tmp/pw-lead/dopb2-5.mjs). Each band reserves the smallest natural height
   it sees, so no width gets a blank gap; within a band the lab can still grow a little when it mounts. */
@media (scripting: enabled){
[data-chapter="doppler"] #lab-doppler-1 .lab-stage{min-height:630px}
[data-chapter="doppler"] #lab-doppler-2 .lab-stage{min-height:803px}
[data-chapter="doppler"] #lab-doppler-3 .lab-stage{min-height:577px}
[data-chapter="doppler"] #lab-doppler-4 .lab-stage{min-height:1111px}}
@media (scripting: enabled) and (max-width:899px){
[data-chapter="doppler"] #lab-doppler-1 .lab-stage{min-height:644px}
[data-chapter="doppler"] #lab-doppler-2 .lab-stage{min-height:838px}
[data-chapter="doppler"] #lab-doppler-3 .lab-stage{min-height:564px}}
@media (scripting: enabled) and (max-width:699px){
[data-chapter="doppler"] #lab-doppler-1 .lab-stage{min-height:656px}
[data-chapter="doppler"] #lab-doppler-2 .lab-stage{min-height:829px}
[data-chapter="doppler"] #lab-doppler-3 .lab-stage{min-height:517px}
[data-chapter="doppler"] #lab-doppler-4 .lab-stage{min-height:1063px}}
@media (scripting: enabled) and (max-width:639px){
[data-chapter="doppler"] #lab-doppler-1 .lab-stage{min-height:1005px}
[data-chapter="doppler"] #lab-doppler-2 .lab-stage{min-height:751px}
[data-chapter="doppler"] #lab-doppler-3 .lab-stage{min-height:1029px}}
@media (scripting: enabled) and (max-width:539px){
[data-chapter="doppler"] #lab-doppler-1 .lab-stage{min-height:1037px}
[data-chapter="doppler"] #lab-doppler-2 .lab-stage{min-height:763px}
[data-chapter="doppler"] #lab-doppler-3 .lab-stage{min-height:990px}
[data-chapter="doppler"] #lab-doppler-4 .lab-stage{min-height:1017px}}
@media (scripting: enabled) and (max-width:479px){
[data-chapter="doppler"] #lab-doppler-1 .lab-stage{min-height:1127px}
[data-chapter="doppler"] #lab-doppler-2 .lab-stage{min-height:748px}
[data-chapter="doppler"] #lab-doppler-3 .lab-stage{min-height:958px}
[data-chapter="doppler"] #lab-doppler-4 .lab-stage{min-height:945px}}
@media (scripting: enabled) and (max-width:359px){
[data-chapter="doppler"] #lab-doppler-1 .lab-stage{min-height:1300px}
[data-chapter="doppler"] #lab-doppler-2 .lab-stage{min-height:728px}
[data-chapter="doppler"] #lab-doppler-3 .lab-stage{min-height:934px}
[data-chapter="doppler"] #lab-doppler-4 .lab-stage{min-height:919px}}
/* touch screens hide the radar lab's Keys button (about 45px), so reserve less there */
@media (scripting: enabled) and (max-width:479px) and (hover:none) and (pointer:coarse){
[data-chapter="doppler"] #lab-doppler-4 .lab-stage{min-height:900px}}
/* two-panel plates: side by side when they fit, stacked on phones (labels keep their authored size) */
[data-chapter="doppler"] .dp-pair{display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start;column-gap:var(--s-2);row-gap:var(--s-3)}
[data-chapter="doppler"] .dp-pair>svg{margin:0;flex:0 1 auto}
/* doppler-source */
[data-chapter="doppler"] .dps-main{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--s-4);align-items:start}
@container (min-width:620px){[data-chapter="doppler"] .dps-main{grid-template-columns:minmax(0,300px) minmax(0,1fr)}}
[data-chapter="doppler"] .dps-svg{display:block;width:100%;max-width:300px;height:auto;margin:0 auto}
[data-chapter="doppler"] .dps-right,[data-chapter="doppler"] .dps-lamptext{display:flex;flex-direction:column;gap:var(--s-2);min-width:0}
[data-chapter="doppler"] .dps-lampbox{display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap}
[data-chapter="doppler"] .dps-lamptext{gap:4px;flex:1 1 160px}
[data-chapter="doppler"] .dps-head{margin:0;font:700 .68rem var(--font-sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted)}
[data-chapter="doppler"] .dps-head small{font-weight:500;letter-spacing:.02em;text-transform:none}
[data-chapter="doppler"] .dps-cap{margin:0;font-size:.95rem;font-weight:650;color:var(--c-lab)}
[data-chapter="doppler"] .dps-made{font-size:.8rem;font-weight:500;color:var(--c-rocket);display:flex;align-items:center;gap:6px}
[data-chapter="doppler"] .dps-swatch{width:12px;height:12px;border-radius:50%;border:1px solid var(--rule);flex:none}
[data-chapter="doppler"] .dps-tone-note{font-size:.74rem;color:var(--ink-muted)}
/* doppler-starfield, doppler-camera */
[data-chapter="doppler"] .dpf-wrap{max-width:560px;margin:0 auto}
[data-chapter="doppler"] .dpc-panels{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--s-3)}
@container (min-width:600px){[data-chapter="doppler"] .dpc-panels{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
[data-chapter="doppler"] .dpc-panel{display:flex;flex-direction:column;gap:6px;min-width:0}
[data-chapter="doppler"] .dpc-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700}
[data-chapter="doppler"] .dpc-head.is-lab{color:var(--c-lab)}
[data-chapter="doppler"] .dpc-head small{font-weight:500;letter-spacing:.02em;text-transform:none;color:var(--ink-muted);font-size:.72rem;text-align:right}
[data-chapter="doppler"] .dps-tnum{font-size:11px}
/* Radar and k: at 0.8 the event table's numbers widen (−36.0, 729.0); tighter cells keep every column in view */
[data-chapter="doppler"] #lab-doppler-4 .stx-table :is(th,td){padding-inline:5px}
/* Plate 12.2 shrinks to about 0.6× on phones: enlarge its key so the row labels and line names stay legible */
@media (max-width:479px){[data-chapter="doppler"] #fig-doppler-2 svg .p-label{font-size:20px}[data-chapter="doppler"] #fig-doppler-2 svg .p-annot{font-size:18px}}
/* redesign (docs/redesign/doppler.md): orientation, k table, Ives figure, legend, radar lab trims */
[data-chapter="doppler"] .dp-orient,[data-chapter="doppler"] .dp-kcard{margin:var(--s-6) 0;max-width:40rem}
[data-chapter="doppler"] .dp-orient ol{margin:var(--s-3) 0 0;padding-left:1.5em}
[data-chapter="doppler"] .dp-orient li+li{margin-top:var(--s-2)}
[data-chapter="doppler"] :is(.dp-orient,.dp-kcard)>:is(p,ol,table)+:is(p,ol){margin-top:var(--s-3)}
[data-chapter="doppler"] .dp-ktable{width:100%;margin-top:var(--s-3)}
[data-chapter="doppler"] .dp-ktable th[scope="row"]{font-weight:600;color:var(--ink-muted)}
[data-chapter="doppler"] .dp-ktable td{white-space:nowrap}
@media (max-width:420px){[data-chapter="doppler"] .dp-ktable :is(th,td){padding:.4em .35em}[data-chapter="doppler"] .dp-ktable td{white-space:normal}}
[data-chapter="doppler"] .dp-ives-fig{margin:var(--s-4) 0 0}
[data-chapter="doppler"] .dp-ives-fig svg{display:block;width:100%;max-width:400px;height:auto;margin:0 auto}
[data-chapter="doppler"] .dp-ives-fig figcaption{font-size:.85rem;color:var(--ink-muted);margin-top:var(--s-2)}
[data-chapter="doppler"] .dp-legend{padding:var(--s-3) var(--s-5) 0;font-size:.9rem}
[data-chapter="doppler"] .dp-kread{margin:var(--s-2) 0 0;font:600 .95rem var(--font-sans);font-variant-numeric:tabular-nums}
[data-chapter="doppler"] #lab-doppler-4 .stx-checks{display:none}
@media (hover:none) and (pointer:coarse){[data-chapter="doppler"] #lab-doppler-4 .stx-controls>.btn[aria-expanded]{display:none}}
[data-chapter="doppler"] figure.lab.is-locked .lab-stage{filter:grayscale(.5) blur(12px)}
@media (max-width:479px){[data-chapter="doppler"] .dp-ives-fig .p-annot{font-size:19px}[data-chapter="doppler"] .dp-ives-fig .p-label{font-size:20px}}
/* revision 2 (retest): k-card title keeps lower-case k; symbol legend; radar table; plate 12.3 label halos; legend aligned with the caption */
[data-chapter="doppler"] .dp-kcard .callout-title .katex{text-transform:none}
[data-chapter="doppler"] .dp-symbols{margin:var(--s-5) 0;max-width:40rem}
[data-chapter="doppler"] .dp-symbols ul{margin:var(--s-2) 0 0;padding-left:1.25em}
[data-chapter="doppler"] .dp-symbols li+li{margin-top:var(--s-1)}
[data-chapter="doppler"] .dp-halo{stroke-width:7px;font-weight:700}
[data-chapter="doppler"] .dp-radar-table{margin-top:var(--s-2);border-collapse:collapse;font-size:.85rem;font-variant-numeric:tabular-nums;width:auto;max-width:100%}
[data-chapter="doppler"] .dp-radar-table caption{caption-side:top;text-align:left;font-size:.8rem;color:var(--ink-muted);padding-bottom:var(--s-1)}
[data-chapter="doppler"] .dp-radar-table :is(th,td){padding:3px 10px;border-bottom:1px solid var(--rule);text-align:right;white-space:nowrap}
[data-chapter="doppler"] .dp-radar-table thead th{background:var(--surface-2);font-weight:600;white-space:normal;vertical-align:bottom}
[data-chapter="doppler"] .dp-radar-table tbody th{text-align:left;font-weight:600}
[data-chapter="doppler"] .dp-radar-table .c-lab{color:var(--c-lab)}
[data-chapter="doppler"] .dp-radar-table .c-rkt{color:var(--c-rocket);font-weight:650}
@media (max-width:699px){[data-chapter="doppler"] .dp-legend{padding-inline:var(--s-3)}}
/* Build it: "dopplerFactor(0.9230769230769231)" made the Input column 231px and pushed Result out of the card at 1280
   (retest). Let that one long input wrap inside its number; R5 in docs/requests/comp-doppler.md asks for a shared fix. */
[data-chapter="doppler"] #code-dopplerFactor .ct-tests td[data-label="Input"] code{overflow-wrap:anywhere}
[data-chapter="doppler"] #code-dopplerFactor .ct-tests td[data-label="Input"]{min-width:9em}
