/* Tools: the interactive-model catalogue and the single-qubit Bloch sphere.
   Colours come from the shared tokens so both themes and the contrast settings keep working. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* Catalogue */
.tool-count{font:12px var(--sans);color:var(--muted)}
.editorial .tool-list h2,.editorial .tool-reading h2{font:500 26px/1.3 var(--sans);letter-spacing:-.03em;margin:0 0 18px}
.editorial .tool-list h3,.editorial .tool-planned h3{font:500 23px/1.3 var(--sans);letter-spacing:-.03em;margin:0 0 8px}
.tool-catalog{margin-top:10px;border-top:1px solid var(--line);padding-top:26px}
.tool-list{list-style:none;padding:0;margin:22px 0 0;border-top:1px solid var(--line)}
.tool-card{display:grid;grid-template-columns:64px minmax(0,1fr);gap:22px;padding:28px 0;border-bottom:1px solid var(--line)}
.tool-index{font:normal 30px/1.2 Georgia,serif;color:var(--line-strong);margin:2px 0 0}
.tool-card h3 a{color:var(--heading)}
.tool-card h3 a:hover{color:var(--blue-strong);text-decoration:underline}
.tool-status{font:500 10px/1.6 var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--blue-strong);margin:0 0 8px}
.tool-summary{font:15px/1.75 var(--sans);color:var(--ink-soft);margin:0;max-width:760px}
.tool-capabilities{margin-top:16px;font:13px/1.7 var(--sans);color:var(--ink-soft)}
.tool-capabilities summary{cursor:pointer;color:var(--blue-strong);padding-block:6px}
.tool-capabilities summary:focus-visible{outline:2px solid var(--focus);outline-offset:4px}
.tool-features{columns:2;column-gap:28px;padding-left:18px;margin:12px 0 0}
.tool-features li{font:13px/1.7 var(--sans);color:var(--ink-soft);padding:3px 0;break-inside:avoid}
.tool-start{display:grid;grid-template-columns:1fr 2fr;gap:12px 40px;padding:24px 0 32px;border-top:1px solid var(--line)}
.editorial .tool-start h2{font:400 26px/1.3 var(--reading-font);margin:0}
.tool-start p{font:15px/1.8 var(--sans);color:var(--ink-soft);margin:0;max-width:65ch}
.tool-start>a{grid-column:2;font:14px/1.7 var(--sans);justify-self:start;padding-block:6px}
.tool-planned{margin-top:52px;padding:30px 0;background:transparent;border-top:1px solid var(--line)}
@media(max-width:600px){.tool-start{grid-template-columns:1fr;gap:12px}.tool-start>a{grid-column:1}.tool-features{columns:1}}
.editorial .tool-planned h2{font:500 25px/1.3 var(--sans);margin:8px 0 12px}
.tool-planned-intro{font:14px/1.75 var(--sans);color:var(--ink-soft);margin:0;max-width:720px}
.tool-planned ul{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:26px;padding:0;margin:26px 0 0}
.tool-planned li{border-top:1px solid var(--line-strong);padding-top:16px}
.tool-planned p{font:13px/1.7 var(--sans);color:var(--muted);margin:0}
.tool-reading{margin-top:52px;border-top:1px solid var(--line);padding-top:30px}
.tool-reading p{font:15px/1.8 var(--sans);color:var(--ink-soft);max-width:74ch;margin:0 0 16px}
/* Single-qubit explorer: drawing beside the controls, stacked on narrow screens. The panel keeps its
   own scroll height so the sphere and every control stay in one view instead of the controls running
   off the bottom of the page. */
.qubit-intro{padding-bottom:8px}
.qubit-lab{display:grid;grid-template-columns:minmax(0,1fr) minmax(330px,1fr);gap:38px;align-items:start;margin:26px 0 10px}
.bloch-figure{--axis-green:#2f7a5b;--axis-green-wash:#e8f2ec;position:sticky;top:74px;margin:0;padding:16px 16px 12px;border:1px solid var(--line-strong);border-radius:4px;background:var(--surface)}
html[data-theme=dark] .bloch-figure{--axis-green:#7fd6a8;--axis-green-wash:#16281f}
.bloch{display:block;width:100%;max-width:min(540px,calc(100vh - 220px));height:auto;margin:0 auto;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}
.bloch.is-dragging,.bloch.is-aiming-axis{cursor:grabbing}
.bloch-surface{fill:var(--blue-wash);stroke:var(--line-strong);stroke-width:1.5}
.bloch-grid{fill:none;stroke:var(--line-strong);stroke-width:1}
.bloch-equator{stroke:var(--field-border)}
.bloch-meridian{stroke-opacity:.75}
.bloch-grid .is-behind{stroke-dasharray:3 5;stroke-opacity:.55}
.bloch-axis{stroke:var(--line-strong);stroke-width:1;stroke-dasharray:2 4}
.bloch-axis-label{fill:var(--ink-soft);font:12px var(--sans);letter-spacing:.01em}
.bloch-vector{stroke:var(--blue-strong);stroke-width:2.6;stroke-linecap:round}
.bloch-guide{stroke:var(--blue);stroke-width:1;stroke-dasharray:4 4;opacity:.65}
.bloch-tip{fill:var(--warm);stroke:var(--surface);stroke-width:1.5}
.bloch-origin{fill:var(--ink-soft)}
.bloch-angle{fill:var(--blue-strong);font:9px var(--sans);opacity:.6;pointer-events:none;font-variant-numeric:tabular-nums}
.bloch-axis-angle{fill:var(--axis-green);font:9px var(--sans);opacity:.65;pointer-events:none;font-variant-numeric:tabular-nums}
.bloch-rotation-axis{stroke:var(--axis-green);stroke-width:1.5;stroke-dasharray:2 5;stroke-linecap:round;opacity:.95}
.bloch-rotation-pole{fill:none;stroke:var(--axis-green);stroke-width:2}
.bloch-rotation-label{fill:var(--axis-green);font:600 14px var(--sans);letter-spacing:.01em}
.bloch-rotation-handle{fill:transparent;cursor:grab}
.bloch-rotation-handle:hover{fill:var(--axis-green-wash);fill-opacity:.6}
.bloch-rotation-cone{fill:var(--blue);fill-opacity:.12;stroke:none}
.bloch-rotation-orbit{fill:none;stroke:var(--field-border);stroke-width:1.1;stroke-dasharray:2 5;stroke-linecap:round}
.bloch-rotation-arc{fill:none;stroke:var(--blue-strong);stroke-width:2;stroke-linecap:round}
.bloch-figure figcaption{font:12px/1.65 var(--sans);color:var(--muted);margin:8px 0 0;text-align:center}
.qubit-panel{display:flex;flex-direction:column;gap:10px;min-width:0;max-height:calc(100vh - 96px);overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding-right:4px}
.qubit-panel .qubit-group{padding:10px 14px 13px}
.qubit-panel .qubit-state{padding:15px 18px 16px}
.qubit-state{border:1px solid var(--line-strong);border-top:3px solid var(--blue);border-radius:4px;padding:18px 20px 20px;background:var(--paper)}
.qubit-kicker{font:500 10px/1.6 var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin:0 0 6px}
.qubit-ket{font:18px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--heading);margin:0 0 14px;overflow-wrap:anywhere}
.qubit-values{display:grid;grid-template-columns:1fr 1fr;gap:10px 22px;margin:0 0 16px}
.qubit-values div{display:flex;flex-direction:column;gap:2px}
.qubit-values dt{font:500 11px/1.5 var(--sans);color:var(--muted)}
.qubit-values dd{font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--ink);margin:0;font-variant-numeric:tabular-nums}
.qubit-meters{display:flex;flex-direction:column;gap:8px}
.meter-label{display:grid;grid-template-columns:74px minmax(0,1fr);align-items:center;gap:10px;margin:0;font:11px/1.5 var(--sans);color:var(--muted)}
.meter-track{display:block;height:8px;border-radius:99px;background:var(--blue-wash);border:1px solid var(--line);overflow:hidden}
.meter-fill{display:block;height:100%;background:var(--blue);transition:width .18s ease}
.qubit-group{border:1px solid var(--line);border-radius:4px;padding:12px 16px 16px;margin:0;min-width:0}
.qubit-group legend{font:500 10px/1.5 var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);padding:0 6px}
.slider-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px}
.slider-row label{font:500 13px/1.5 var(--sans);color:var(--ink);white-space:nowrap}
.slider-note{font-weight:400;color:var(--muted);font-size:11px}
.slider-row output{font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--ink);min-width:92px;text-align:right;font-variant-numeric:tabular-nums}
.slider-row input[type=range]{width:100%;min-width:0;margin:0;accent-color:var(--blue);cursor:pointer}
.slider-row input[type=range]:focus-visible{outline:3px solid var(--focus);outline-offset:4px}
.slider-hint{font:12px/1.65 var(--sans);color:var(--muted);margin:8px 0 0;max-width:60ch}
.qubit-buttons{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.qubit-buttons button{min-height:40px;padding:8px 14px;border:1px solid var(--line-strong);border-radius:4px;background:var(--card);color:var(--ink);font:500 13px/1.4 var(--sans);cursor:pointer}
.qubit-buttons button:hover{background:var(--hover);border-color:var(--field-border);color:var(--blue-strong)}
.qubit-buttons button:active{background:var(--blue-soft)}
.qubit-buttons [data-preset],.qubit-buttons [data-gate],.qubit-buttons [data-axis-theta]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}
.rotation-formula{font:13px/1.6 var(--sans);color:var(--ink-soft);margin:0 0 8px;overflow-x:auto}
.rotation-readout{font:12px/1.7 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--ink);margin:10px 0 0;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.rotation-matrix{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px 14px;margin:8px 0 0}
.rotation-matrix div{flex-direction:row;align-items:baseline;gap:6px}
.rotation-matrix dd{font-size:12px}
.measure-result,.measure-tally{font:12px/1.65 var(--sans);margin:12px 0 0;color:var(--ink-soft);max-width:60ch}
.measure-tally{color:var(--muted);font-variant-numeric:tabular-nums}
.qubit-noscript{font:12px/1.65 var(--sans);color:var(--muted);margin:0;padding:12px 14px;border:1px dashed var(--line-strong);border-radius:4px}
/* The two pictures of one two-qubit state, side by side: amplitudes in a plane on the left, the
   Schmidt sphere on the right. Turning a coefficient in the plane redraws the sphere. */
.two-views{margin:26px 0 0}
.view-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:34px;align-items:start}
.view-column{display:flex;flex-direction:column;gap:14px;min-width:0}
.editorial .view-heading{font:500 21px/1.3 var(--sans);letter-spacing:-.02em;color:var(--heading);margin:0}
.schmidt-figure{margin:0;padding:14px;border:1px solid var(--line-strong);border-radius:4px;background:var(--surface)}
.schmidt{display:block;width:100%;max-width:520px;height:auto;margin:0 auto}
.schmidt-figure figcaption{font:12px/1.65 var(--sans);color:var(--muted);margin:8px 4px 0;text-align:center}
.schmidt-panel{display:flex;flex-direction:column;gap:14px;min-width:0}
.schmidt-formula{font:15px/1.9 var(--sans);color:var(--ink);margin:0;overflow-wrap:anywhere}
.schmidt-values{grid-template-columns:1fr 1fr;gap:10px 24px;margin:0}
.schmidt-a-line{stroke:var(--blue);stroke-width:1.6;stroke-dasharray:6 4;opacity:.9}
.schmidt-parallelogram{fill:var(--heading);fill-opacity:.06;stroke:var(--heading);stroke-opacity:.24;stroke-width:1}
.schmidt-a-tip{fill:none;stroke:var(--blue);stroke-width:1.8}
.schmidt-a-label{fill:var(--blue-strong);font:10px var(--sans)}
.schmidt-b-axis{stroke:var(--warm);stroke-width:1;stroke-dasharray:2 5;opacity:.35}
.schmidt-b-line{stroke:var(--warm);stroke-width:2.6;stroke-linecap:round}
.schmidt-b-tip{fill:var(--warm);stroke:var(--surface);stroke-width:1}
.schmidt-b-label{fill:var(--warm);font:10px var(--sans)}
.schmidt .is-empty{display:none}
@media(max-width:980px){.schmidt{max-width:460px}}
/* The explanation below the model. */
.qubit-reading{margin-top:44px;border-top:1px solid var(--line);padding-top:30px}
.editorial .qubit-reading h2{font:500 25px/1.3 var(--sans);letter-spacing:-.03em;margin:0 0 14px}
.qubit-reading p{font:15px/1.8 var(--sans);color:var(--ink-soft);max-width:74ch;margin:0 0 16px}
.qubit-reading sup{font-size:.72em}
.qubit-try{font:15px/1.8 var(--sans);color:var(--ink-soft);max-width:74ch;padding-left:22px;margin:0 0 20px}
.qubit-try li{margin-bottom:10px;padding-left:4px}
.qubit-try li::marker{color:var(--blue-strong);font-weight:600}
.qubit-note{border-left:2px solid var(--line-strong);padding-left:16px;font-size:14px!important;color:var(--muted)!important}
@media(max-width:980px){
  .qubit-lab{grid-template-columns:1fr;gap:26px}
  .bloch-figure{position:static}
  .bloch{max-width:460px}
  .qubit-panel{max-height:none;overflow:visible;scrollbar-gutter:auto;padding-right:0}
  .tool-planned ul{grid-template-columns:1fr;gap:20px}
}
@media(max-width:760px){
  .tool-card{grid-template-columns:1fr;gap:6px}
  .tool-index{font-size:22px}
  .tool-planned{padding:22px}
  .qubit-values{grid-template-columns:1fr}
  .slider-row{grid-template-columns:minmax(0,1fr) auto}
  .slider-row label{grid-column:1/-1}
  .slider-row output{min-width:0}
}
@media(max-width:430px){
  .qubit-buttons button{flex:1 1 auto}
  .meter-label{grid-template-columns:62px minmax(0,1fr)}
}
/* Two-qubit explorer: one complex plane holding every vector. */
.two-invariants{display:grid;grid-template-columns:1fr 1fr;gap:10px 24px;margin:0}
.two-invariants div{display:flex;flex-direction:column;gap:2px}
.two-invariants dt{font:500 10px/1.5 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.two-invariants dd{font:14px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--heading);margin:0;font-variant-numeric:tabular-nums}
.phasor-figure{margin:0;padding:14px;border:1px solid var(--line-strong);border-radius:4px;background:var(--surface)}
.phasor-figure figcaption{font:12px/1.65 var(--sans);color:var(--muted);margin:8px 4px 0;text-align:center}
.phasor{display:block;width:100%;max-width:520px;height:auto;margin:0 auto;touch-action:none;-webkit-user-select:none;user-select:none;--heat-0:rgba(147,77,54,0);--heat-1:rgba(147,77,54,.06);--heat-2:rgba(147,77,54,.13);--heat-3:rgba(147,77,54,.21);--heat-4:rgba(147,77,54,.32)}
html[data-theme=dark] .phasor{--heat-0:rgba(240,165,138,0);--heat-1:rgba(240,165,138,.06);--heat-2:rgba(240,165,138,.12);--heat-3:rgba(240,165,138,.19);--heat-4:rgba(240,165,138,.28)}
.phasor.is-dragging{cursor:grabbing}
.ph-ring{fill:none;stroke:var(--line-strong);stroke-width:1}
.ph-contour{fill:none;stroke:var(--line-strong);stroke-width:1;stroke-dasharray:3 5;stroke-opacity:.55}
.ph-heat{fill:url(#ph-heat);transition:opacity .35s ease}
.ph-axis{stroke:var(--line-strong);stroke-width:1;stroke-dasharray:2 4}
.ph-tick{fill:var(--muted);font:10px var(--sans)}
.ph-origin{fill:var(--ink-soft)}
.ph-arrow{stroke-width:2.4;stroke-linecap:round;fill:none}
.ph-head-0{fill:var(--blue)}.ph-head-1{fill:var(--violet)}.ph-head-2{fill:var(--warm)}.ph-head-3{fill:var(--ink-soft)}
.ph-head-p1,.ph-head-p2{fill:var(--muted)}
.ph-head-needle{fill:var(--heading);fill-opacity:.5}
#ph-vec-00{stroke:var(--blue)}
#ph-vec-01{stroke:var(--violet);stroke-dasharray:7 4}
#ph-vec-10{stroke:var(--warm)}
#ph-vec-11{stroke:var(--ink-soft);stroke-dasharray:7 4}
.ph-label{fill:var(--ink);font:11px var(--sans)}
.ph-arrow.is-pairing{stroke:var(--muted);stroke-width:1.4;stroke-dasharray:4 4}
.ph-needle .ph-arrow{stroke:var(--heading);stroke-width:2.6;stroke-opacity:.5}
.ph-needle .ph-arrow.is-halo{stroke-width:12;stroke-opacity:.1;stroke-linecap:round;marker-end:none}
.ph-needle .ph-label{fill:var(--heading);font-weight:600}
.ph-toggle{display:flex;align-items:center;gap:8px;font:12px/1.5 var(--sans);color:var(--ink-soft);cursor:pointer}
.ph-toggle input{accent-color:var(--blue);width:15px;height:15px;margin:0}
.phasor-actions{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap}
.ph-normalize{min-height:36px;padding:6px 14px;border:1px solid var(--line-strong);border-radius:4px;background:var(--card);color:var(--ink);font:500 12px/1.4 var(--sans);cursor:pointer}
.ph-normalize:hover:not(:disabled){background:var(--hover);border-color:var(--field-border);color:var(--blue-strong)}
.ph-normalize:active:not(:disabled){background:var(--blue-soft)}
.ph-normalize:disabled{opacity:.5;cursor:default}
.ph-normalize:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.ph-norm{font:11px/1.6 var(--sans);color:var(--muted);margin:0;font-variant-numeric:tabular-nums}
.ph-norm.is-unnormalized{color:var(--warm)}
.ph-hit{stroke:transparent;stroke-width:20;fill:none;pointer-events:stroke}
.ph-vec{cursor:grab}
.ph-vec[tabindex="-1"]{cursor:default}
.ph-vec:hover .ph-arrow{stroke-width:3.6}
.ph-vec:focus-visible .ph-arrow{stroke-width:4}
.phasor .is-empty{display:none}
.phasor-panel{display:flex;flex-direction:column;gap:14px;min-width:0}
.amplitude-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:10px}
.amp-cell{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px 9px;border:1px solid var(--line);border-radius:4px;background:var(--paper)}
.amp-dial{width:64px;height:64px}
.amp-ring{fill:none;stroke:var(--line-strong);stroke-width:1}
.amp-axis{stroke:var(--line-strong);stroke-width:1;stroke-dasharray:2 4;opacity:.6}
.amp-needle{stroke:var(--blue-strong);stroke-width:2;stroke-linecap:round}
.amp-tip{fill:var(--blue-strong)}
.amp-name{font:500 12px/1.4 var(--sans);color:var(--ink);margin:0}
.amp-numbers{display:flex;gap:7px;font:11px/1.4 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--muted);margin:0;font-variant-numeric:tabular-nums}
.amp-cell .is-empty{display:none}
.amp-caption{font:11px/1.6 var(--sans);color:var(--muted);margin:0}
.two-controls{margin:0 0 28px;padding-bottom:22px;border-bottom:1px solid var(--line)}
.menu-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(152px,1fr));gap:14px;align-items:end}
.menu{display:flex;flex-direction:column;gap:6px;min-width:0}
.menu label{font:500 10px/1.5 var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.menu select{width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--line-strong);border-radius:4px;background:var(--card);color:var(--ink);font:500 13px/1.4 var(--sans);cursor:pointer}
.menu select:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.control-readouts{margin-top:12px}
.control-line{display:flex;flex-wrap:wrap;gap:2px 16px;margin:0;font:12px/1.6 var(--sans);color:var(--muted)}
.control-line .measure-result{color:var(--ink-soft)}
.control-line .measure-tally{font-variant-numeric:tabular-nums}
@media(max-width:980px){
  .view-grid{grid-template-columns:1fr;gap:30px}
  .phasor{max-width:460px}
}
@media print{.phasor-figure,.bloch-figure{break-inside:avoid}.bloch-figure{position:static}.qubit-panel{max-height:none;overflow:visible}}
/* Three-qubit explorer: eight amplitude arrows, and the two Schmidt planes of the reference cut. */
.ph3-arrow{stroke:var(--amp,var(--ink));stroke-width:2.4;stroke-linecap:round;fill:none}
.ph3-hit{stroke:transparent;stroke-width:18;fill:none;pointer-events:stroke}
.ph3-vec{cursor:grab}
.ph3-vec:hover .ph3-arrow{stroke-width:3.6}
.ph3-vec:focus-visible .ph3-arrow{stroke-width:4}
#ph3-group-000,#ph3-group-001{--amp:var(--blue)}
#ph3-group-010,#ph3-group-011{--amp:var(--violet)}
#ph3-group-100,#ph3-group-101{--amp:var(--warm)}
#ph3-group-110,#ph3-group-111{--amp:var(--ink-soft)}
#ph3-vec-001,#ph3-vec-011,#ph3-vec-101,#ph3-vec-111{stroke-dasharray:7 4}
.ph3-head-0{fill:var(--blue)}.ph3-head-1{fill:var(--violet)}
.ph3-head-2{fill:var(--warm)}.ph3-head-3{fill:var(--ink-soft)}
.phasor8 .ph-label{font-size:10px;fill:var(--amp,var(--ink))}
.planes{display:block;width:100%;max-width:520px;height:auto;margin:0 auto;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}
.planes.is-orbiting{cursor:grabbing}
.planes:focus-visible{outline:3px solid var(--focus);outline-offset:4px}
.planes .is-empty{display:none}
.plane-branch.branch-0{--plane:var(--blue);--plane-ink:var(--blue-strong)}
.plane-branch.branch-1{--plane:var(--warm);--plane-ink:var(--warm)}
.plane-axis{stroke:var(--plane);stroke-width:1.4;stroke-dasharray:6 4;opacity:.85}
.plane-arm{stroke:var(--plane);stroke-width:2.6;stroke-linecap:round}
.plane-p-tip{fill:none;stroke:var(--plane);stroke-width:1.8}
.plane-q-tip{fill:var(--plane);stroke:var(--surface);stroke-width:1}
.plane-p-label{fill:var(--plane-ink);font:10px var(--sans)}
.plane-q-label{fill:var(--plane);font:10px var(--sans)}
.plane-meet-line{stroke:var(--violet);stroke-width:2.4;stroke-linecap:round}
.plane-meet-tip{fill:var(--violet);stroke:var(--surface);stroke-width:1}
.plane-u-label{fill:var(--violet);font:500 10px var(--sans)}
.plane-angle{font:11px/1.6 var(--sans);color:var(--muted);margin:0;font-variant-numeric:tabular-nums}
.plane-fills .branch-0,.plane-edges .branch-0{--plane:var(--blue)}
.plane-fills .branch-1,.plane-edges .branch-1{--plane:var(--warm)}
.plane-fill{fill:var(--plane);stroke:none}
.plane-edge{fill:none;stroke:var(--plane);stroke-width:1;stroke-opacity:.5}
.plane-edge.is-behind{stroke-dasharray:3 5;stroke-opacity:.3}
.plane-view{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap}
.plane-hint{font:11px/1.6 var(--sans);color:var(--muted);margin:0;max-width:46ch}
.plane-legend{display:flex;flex-wrap:wrap;gap:8px 18px;margin:0}
.plane-key{display:flex;align-items:center;gap:7px;font:12px/1.5 var(--sans);color:var(--ink-soft);margin:0}
.plane-swatch{width:14px;height:14px;border-radius:3px;border:1px solid var(--line-strong)}
.plane-swatch.branch-0{background:var(--blue)}
.plane-swatch.branch-1{background:var(--warm)}
.plane-swatch.is-shared{height:2px;border:0;border-radius:0;background:var(--violet)}
.plane-table{width:100%;border-collapse:collapse;font:12px/1.5 var(--sans);color:var(--ink-soft)}
.plane-table th,.plane-table td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:left}
.plane-table thead th{font:500 10px/1.5 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.plane-table tbody th{font-weight:500;color:var(--muted)}
.plane-table td{font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--heading);font-variant-numeric:tabular-nums}
@media(max-width:980px){.planes{max-width:460px}}
.majorana-sphere{max-width:min(520px,calc(100vh - 220px))}
.majorana-star{fill:var(--violet);stroke:var(--surface);stroke-width:1.6;cursor:grab}
.majorana-star.is-selected{stroke:var(--heading);stroke-width:2.4}
.majorana-star.is-behind{fill-opacity:.45}
.majorana-index{fill:var(--violet);font:600 10px var(--sans);paint-order:stroke;stroke:var(--surface);stroke-width:2.4;pointer-events:none;font-variant-numeric:tabular-nums}
.majorana-index.is-behind{opacity:.45}
.majorana-index.is-empty{display:none}
.majorana-polynomial{font:12px/1.7 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--muted);margin:12px 0 0;overflow-x:auto;white-space:nowrap}
.majorana-table{margin-top:18px}
.majorana-table tbody tr.is-empty{display:none}
.slider-row select{width:100%;min-width:0;padding:6px 8px;border:1px solid var(--line-strong);border-radius:3px;background:var(--paper);color:var(--ink);font:13px var(--sans);cursor:pointer}
.slider-row select:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
