
/* ============ THE STATION LINE — theme tokens ============ */
:root{
  /* Reading preferences. Every one of these is a knob the reader can turn from
     the type panel; the defaults below are the house setting. Type, spacing and
     density are expressed as tokens rather than literals so one control changes
     the whole page coherently instead of one element at a time. */
  --disp:Georgia,"Iowan Old Style","Palatino Linotype",serif;
  --sans:Georgia,"Iowan Old Style",serif;
  --mono:"Courier New",ui-monospace,Menlo,monospace;
  --fs-base:16.5px;      /* body prose */
  --lh-base:1.72;        /* body leading */
  --measure:74ch;        /* line length for running prose; see the note below */
  --fs-rail:11px;        /* the left rail's own scale, see --density */
  --density:1;           /* multiplies vertical rhythm in chrome and lists */
  --rail-w:252px;
  --shell:1240px;
}
/* An article is one column of prose, so its shell hugs the measure — the
   breathing room belongs outside the card, not stranded inside it. The
   collection pages keep the wider shell for their lists and facet grids. */
body[data-page="article"]{--shell:1080px;}

/* ---------- reader type presets ----------------------------------------
   Each preset re-points the three family tokens; nothing else in the sheet
   names a typeface, so one attribute reskins the whole site coherently.
   Stacks are ordered best-available-first and fall back to faces that ship
   with Windows and macOS, because this site bundles no web fonts.

   On "Caslon": The New Yorker sets its text in Adobe Caslon and its display
   in a proprietary hand (Irvin). Neither is free, and neither is assumed
   present. This preset asks for a real Caslon first and degrades to the
   nearest widely-installed old-style faces -- it is an approximation of the
   look, and the panel says so rather than claiming to be the magazine's type. */
/* ---------- reading typefaces -------------------------------------------
   These are SYSTEM stacks: the browser takes the first face the reader
   actually has. That makes the list machine-dependent, which is why each
   preset is built around a face that is genuinely common on at least one
   platform and degrades to something of the same character rather than to
   whatever the browser calls "serif".

   Two of them name faces that are NOT common: "New Yorker" (the magazine's
   Irvin display face) and "Adobe Caslon Pro" (its text face). They are offered
   because this collection's owner has them installed, and they are by far the
   best reading pair available here. A visitor without them falls through to
   Cormorant Infant / Sitka / Palatino, which keeps the old-style character.
   Nothing is bundled, so no web font is fetched and the page works offline. */
:root[data-type="station"]{
  --disp:Georgia,"Iowan Old Style","Palatino Linotype",serif;
  --sans:Georgia,"Iowan Old Style",serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
/* Irvin for the headline, Caslon for the text -- the magazine's own division
   of labour. Irvin is a DISPLAY face: it is never used for running prose. */
:root[data-type="newyorker"]{
  --disp:"New Yorker","Cormorant Infant","Adobe Caslon Pro","Big Caslon",Georgia,serif;
  --sans:"Adobe Caslon Pro","Sitka Text","Palatino Linotype",Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="caslon"]{
  --disp:"Adobe Caslon Pro","Libre Caslon Text","Big Caslon","Book Antiqua",Garamond,Georgia,serif;
  --sans:"Adobe Caslon Pro","Libre Caslon Text","Book Antiqua",Garamond,Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
/* Sitka was drawn from legibility research and ships with Windows; it is the
   best pure reading serif most readers here will already have. */
:root[data-type="sitka"]{
  --disp:"Sitka Display","Sitka Heading","Sitka Text",Sitka,Constantia,Georgia,serif;
  --sans:"Sitka Text",Sitka,Constantia,Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="palatino"]{
  --disp:"Palatino Linotype",Palatino,"Book Antiqua","URW Palladio L",Georgia,serif;
  --sans:"Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="constantia"]{
  --disp:Constantia,"Sitka Text","Lucida Bright",Georgia,serif;
  --sans:Constantia,"Sitka Text","Lucida Bright",Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
/* High-contrast display serif over a calm text serif -- the most editorial
   pairing in the list, and the one that looks least like a default. */
:root[data-type="cormorant"]{
  --disp:"Cormorant Infant","Cormorant Garamond",Cormorant,"Adobe Caslon Pro",Garamond,serif;
  --sans:"Sitka Text",Constantia,"Palatino Linotype",Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="slab"]{
  --disp:"Zilla Slab","Roboto Slab","Bitter",Rockwell,"Noto Serif",serif;
  --sans:"Zilla Slab","Noto Serif",Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="lucida"]{
  --disp:"Lucida Bright","Lucida Sans","Book Antiqua",Georgia,serif;
  --sans:"Lucida Bright","Lucida Sans",Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="humanist"]{
  --disp:Candara,Corbel,Optima,"Gill Sans MT","Segoe UI",sans-serif;
  --sans:Corbel,Candara,Optima,"Segoe UI",sans-serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="noto"]{
  --disp:"Noto Serif","Source Serif 4","Liberation Serif",Georgia,serif;
  --sans:"Noto Serif","Source Serif 4",Georgia,serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
:root[data-type="grotesque"]{
  --disp:"Segoe UI Variable Display","Segoe UI",system-ui,"Helvetica Neue",Arial,sans-serif;
  --sans:"Segoe UI Variable Text","Segoe UI",system-ui,"Helvetica Neue",Arial,sans-serif;
  --mono:"Cascadia Mono","Consolas",ui-monospace,monospace;}
/* Not a style choice: wide apertures, disambiguated glyph pairs, generous
   spacing. Offered because a reading site should have a legibility setting. */
:root[data-type="legible"]{
  --disp:"Atkinson Hyperlegible",Verdana,"Segoe UI",Tahoma,sans-serif;
  --sans:"Atkinson Hyperlegible",Verdana,"Segoe UI",Tahoma,sans-serif;
  --mono:"Cascadia Mono",Consolas,ui-monospace,monospace;}

/* ---------- the type panel ---------- */
.typepanel{position:fixed;top:62px;right:16px;z-index:71;width:296px;max-width:calc(100vw - 32px);
  background:var(--card);border:1.5px solid var(--line2);border-radius:12px;
  box-shadow:var(--shadow);padding:14px 15px 16px;display:none;
  max-height:calc(100vh - 84px);overflow-y:auto;scrollbar-width:thin;}
.typepanel[data-open="1"]{display:block;}
.typepanel h2{font:700 9.5px/1 var(--mono);letter-spacing:.2em;color:var(--mut);
  margin:0 0 10px;text-transform:uppercase;}
.tpsec{font:700 8.5px/1 var(--mono);letter-spacing:.18em;color:var(--mut);
  margin:15px 0 7px;}
.tpsec:first-of-type{margin-top:4px;}
.tprow{display:flex;flex-wrap:wrap;gap:6px;}
.tpopt{flex:1 1 auto;min-width:62px;text-align:center;cursor:pointer;
  border:1.5px solid var(--line2);border-radius:7px;background:var(--bg);color:var(--mut);
  padding:7px 9px;font:700 10px/1.25 var(--mono);letter-spacing:.08em;}
.tpopt:hover{border-color:var(--ac);color:var(--ink);}
.tpopt[aria-pressed="true"]{border-color:var(--ac);color:var(--ink);background:var(--card);
  box-shadow:inset 0 0 0 1.5px var(--ac);}
.tpopt .spec{display:block;font:400 12px/1.35 var(--sans);letter-spacing:0;
  color:var(--ink);margin-top:3px;text-transform:none;}
.tpnote{font:400 10.5px/1.5 var(--sans);color:var(--mut);margin:8px 0 0;}
.tpfoot{display:flex;gap:8px;margin-top:14px;padding-top:12px;
  border-top:1px solid var(--line);}
.tpreset{flex:1;cursor:pointer;border:1.5px solid var(--line2);border-radius:7px;
  background:var(--bg);color:var(--mut);padding:8px;font:700 9.5px/1 var(--mono);
  letter-spacing:.12em;}
.tpreset:hover{border-color:var(--ac);color:var(--ink);}
@media (max-width:900px){
  .typepanel{top:auto;bottom:62px;right:10px;left:10px;width:auto;}
}
:root{--bg:#eae4d6;--card:#f6f1e5;--panel2:#e0d8c4;--ink:#241f1a;--mut:#6e6455;--line:#d3c9b4;--line2:#b9ac93;--wire:#8a8375;--code-bg:#f1ecdd;--code-ink:#3a332a;--shadow:0 2px 14px rgba(36,31,26,.10);--rule-l:#efe8d5;--rule-d:#cdbfa2;--ac:#8a5a12;--ac-f:#f0e3c6;--fr:#5c4632;--fr-ink:#f6f1e5;--k1:#2f6f74;--k1f:#d8e7e5;--k2:#5c4632;--k2f:#e7dccb;--k3:#54607a;--k3f:#dde1e8;--k4:#6d4a76;--k4f:#e6dcea;--k5:#8a5a12;--k5f:#f0e3c6;--k6:#a8452c;--k6f:#f3ddd4;--k7:#3f7440;--k7f:#dce8d2;--k8:#8a8375;--k8f:#e5e0d2;}
@media (prefers-color-scheme: dark){:root{--bg:#141416;--card:#1d1d21;--panel2:#26262d;--ink:#e8e5dd;--mut:#a29b8d;--line:#31313a;--line2:#45454f;--wire:#6e6961;--code-bg:#1a1a1f;--code-ink:#d9d5c9;--shadow:0 4px 18px rgba(0,0,0,.55);--rule-l:#232329;--rule-d:#3a3a45;--ac:#d3a24a;--ac-f:#33280f;--fr:#9c7d5a;--fr-ink:#191914;--k1:#57a2a8;--k1f:#12292b;--k2:#a07a55;--k2f:#2d2318;--k3:#93a1bd;--k3f:#20242e;--k4:#b295bd;--k4f:#2b2130;--k5:#d3a24a;--k5f:#33280f;--k6:#d97a5e;--k6f:#331810;--k7:#7fb877;--k7f:#16281a;--k8:#8a857b;--k8f:#26262a;}}
:root[data-theme="light"]{--bg:#eae4d6;--card:#f6f1e5;--panel2:#e0d8c4;--ink:#241f1a;--mut:#6e6455;--line:#d3c9b4;--line2:#b9ac93;--wire:#8a8375;--code-bg:#f1ecdd;--code-ink:#3a332a;--shadow:0 2px 14px rgba(36,31,26,.10);--rule-l:#efe8d5;--rule-d:#cdbfa2;--ac:#8a5a12;--ac-f:#f0e3c6;--fr:#5c4632;--fr-ink:#f6f1e5;--k1:#2f6f74;--k1f:#d8e7e5;--k2:#5c4632;--k2f:#e7dccb;--k3:#54607a;--k3f:#dde1e8;--k4:#6d4a76;--k4f:#e6dcea;--k5:#8a5a12;--k5f:#f0e3c6;--k6:#a8452c;--k6f:#f3ddd4;--k7:#3f7440;--k7f:#dce8d2;--k8:#8a8375;--k8f:#e5e0d2;}
:root[data-theme="dark"]{--bg:#141416;--card:#1d1d21;--panel2:#26262d;--ink:#e8e5dd;--mut:#a29b8d;--line:#31313a;--line2:#45454f;--wire:#6e6961;--code-bg:#1a1a1f;--code-ink:#d9d5c9;--shadow:0 4px 18px rgba(0,0,0,.55);--rule-l:#232329;--rule-d:#3a3a45;--ac:#d3a24a;--ac-f:#33280f;--fr:#9c7d5a;--fr-ink:#191914;--k1:#57a2a8;--k1f:#12292b;--k2:#a07a55;--k2f:#2d2318;--k3:#93a1bd;--k3f:#20242e;--k4:#b295bd;--k4f:#2b2130;--k5:#d3a24a;--k5f:#33280f;--k6:#d97a5e;--k6f:#331810;--k7:#7fb877;--k7f:#16281a;--k8:#8a857b;--k8f:#26262a;}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{margin:0;background:var(--bg);color:var(--ink);font:var(--fs-base)/var(--lh-base) var(--sans);
  -webkit-font-smoothing:antialiased;overflow-x:hidden;padding-bottom:56px;}
/* ruled-folio ground: faint column rules fading out below the masthead */
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.5;
  background:repeating-linear-gradient(90deg,var(--rule-d) 0 1px,transparent 1px 78px);
  mask-image:linear-gradient(to bottom,rgba(0,0,0,.55),transparent 520px);
  -webkit-mask-image:linear-gradient(to bottom,rgba(0,0,0,.55),transparent 520px);}
:root[data-theme="dark"] body::before{opacity:.75;}
.page{position:relative;z-index:1;}
.col{max-width:var(--shell);margin:0 auto;padding:0 26px;}
a{color:var(--ac);}
a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--ac);outline-offset:2px;}
::selection{background:var(--ac-f);color:var(--ink);}
code{font-family:var(--mono);font-size:.86em;background:var(--code-bg);color:var(--code-ink);
  padding:1px 5px;border-radius:3px;border:1px solid var(--line);overflow-wrap:anywhere;}
strong{color:var(--ink);}
/* The measure is capped on prose only — a structural list (the shelf, the
   rail, a facet's chips) must take the full column, not a reading measure.

   Everything that holds running text derives its width from --measure rather
   than carrying its own hard ch value. The ratios preserve the original
   relationships (standfirst and question narrower than body, annotation slips
   and code wider) so changing the measure rescales the whole page coherently
   instead of making one element disagree with its neighbours. Before this,
   --measure was declared and read by nothing at all: the control moved a token
   no rule consumed, so the Measure setting did visibly nothing. */
p{margin:0 0 calc(1.05em * var(--density));max-width:var(--measure);}
.stationbody ul,.stationbody ol{max-width:var(--measure);}
.stationbody li{margin-bottom:calc(.35em * var(--density));}
h3{font:700 19px/1.35 var(--disp);margin:calc(1.6em * var(--density)) 0 calc(.55em * var(--density));}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}
.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--card);color:var(--ink);
  border:1.5px solid var(--ac);border-radius:0 0 8px 0;padding:12px 18px;text-decoration:none;
  font:700 10.5px/1 var(--mono);letter-spacing:.14em;}
.skip:focus{left:0;}

/* ---------- top controls: lamp (theme) + shortcuts ---------- */
.topctl{position:fixed;top:14px;right:16px;z-index:70;display:flex;gap:8px;}
.tbtn{display:inline-flex;align-items:center;gap:9px;font:700 10.5px/1 var(--mono);letter-spacing:.14em;
  color:var(--ink);background:var(--card);border:1.5px solid var(--line2);border-radius:999px;
  padding:9px 14px;cursor:pointer;box-shadow:var(--shadow);}
.tbtn:hover{border-color:var(--ac);color:var(--ac);}
.tbtn .wick{width:11px;height:11px;border-radius:50%;flex:none;border:1.5px solid var(--ink);
  background:var(--bg);}
:root[data-theme="dark"] .tbtn .wick{background:var(--ac);border-color:var(--ac);
  box-shadow:0 0 0 2px var(--ac-f);}
.tbtn .onlight{display:inline;} .tbtn .ondark{display:none;}
:root[data-theme="dark"] .tbtn .onlight{display:none;}
:root[data-theme="dark"] .tbtn .ondark{display:inline;}

/* ---------- left rail: the station tree / the domain tree ---------- */
.rail{position:fixed;left:0;top:0;bottom:0;width:var(--rail-w);z-index:50;overflow-y:auto;
  padding:18px 12px 26px 16px;border-right:1.5px solid var(--line);background:var(--bg);
  scrollbar-width:thin;display:none;}
.railhome{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink);
  border:1.5px solid var(--line2);border-radius:8px;background:var(--card);padding:9px 11px;
  box-shadow:var(--shadow);}
.railhome:hover{border-color:var(--ac);}
.railhome .mark{width:15px;height:15px;border-radius:50%;border:2.5px solid var(--ac);flex:none;}
.railhome b{font:700 calc(var(--fs-rail) * .96)/1.5 var(--mono);letter-spacing:.13em;}
.railhome i{font-style:normal;color:var(--mut);font-weight:400;display:block;
  font:400 calc(var(--fs-rail) * .88)/1.5 var(--mono);letter-spacing:.09em;}
.railsec{font:700 calc(var(--fs-rail) * .82)/1 var(--mono);letter-spacing:.2em;color:var(--mut);
  margin:calc(20px * var(--density)) 0 calc(9px * var(--density));padding-left:2px;}
/* the branch spine — the openings-tree connector idiom, carrying stations */
.branches{list-style:none;margin:0;padding:0 0 0 11px;position:relative;}
.branches::before{content:"";position:absolute;left:0;top:6px;bottom:12px;width:2px;
  background:var(--line2);}
.node{position:relative;margin:2px 0;}
.node::before{content:"";position:absolute;left:-11px;top:13px;width:11px;height:2px;
  background:var(--line);}
.node>a{display:flex;align-items:baseline;gap:8px;text-decoration:none;padding:calc(5px * var(--density)) 8px;
  border-radius:5px;color:var(--mut);border:1.5px solid transparent;}
.node>a:hover{color:var(--ink);background:var(--card);}
.node .mk{font:700 calc(var(--fs-rail) * 1.02)/1.3 var(--mono);color:var(--wire);flex:none;width:13px;}
.node .nl{font:700 calc(var(--fs-rail) * .94)/1.45 var(--mono);letter-spacing:.11em;min-width:0;overflow-wrap:anywhere;}
.node .ct{margin-left:auto;font:700 calc(var(--fs-rail) * .9)/1.4 var(--mono);color:var(--wire);
  font-variant-numeric:tabular-nums;flex:none;}
.node.on>a{color:var(--ink);background:var(--card);border-color:var(--ac);box-shadow:var(--shadow);}
.node.on .mk{color:var(--ac);}
.node.on::before{background:var(--ac);}
.node.done .mk{color:var(--k7);}
/* each station's own hue on its rail mark */
.node[data-kind="open"] .mk{color:var(--k1);} .node[data-kind="work"] .mk{color:var(--k3);}
.node[data-kind="figure"] .mk{color:var(--k4);} .node[data-kind="correct"] .mk{color:var(--k6);}
.node[data-kind="plate"] .mk{color:var(--k5);} .node[data-kind="gain"] .mk{color:var(--k7);}
.node[data-kind="onward"] .mk{color:var(--k2);} .node[data-kind="terms"] .mk{color:var(--k8);}
.railnav{list-style:none;margin:0;padding:0;}
.railnav a{display:block;text-decoration:none;color:var(--mut);padding:calc(6px * var(--density)) 8px;border-radius:5px;
  font:700 var(--fs-rail)/1.4 var(--mono);letter-spacing:.1em;}
.railnav a:hover{background:var(--card);color:var(--ink);}
.railnav a[aria-current="page"]{color:var(--ink);background:var(--card);
  box-shadow:inset 2.5px 0 0 var(--ac);}

/* ---------- bottom strip (narrow viewports) ---------- */
.strip{position:fixed;left:0;right:0;bottom:0;z-index:65;display:flex;align-items:stretch;
  border-top:2px solid var(--line2);background:var(--card);box-shadow:0 -4px 16px rgba(0,0,0,.18);}
.stripbtn{flex:1 1 auto;display:flex;align-items:center;gap:9px;min-width:0;border:0;background:none;
  color:var(--ink);font:700 10.5px/1 var(--mono);letter-spacing:.1em;padding:13px 14px;
  cursor:pointer;text-align:left;}
.stripbtn .mk{color:var(--ac);flex:none;}
.stripbtn .cur{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;}
.stripbtn .caret{margin-left:auto;color:var(--mut);flex:none;}
.stripmenu{position:fixed;left:0;right:0;bottom:44px;z-index:64;background:var(--card);
  border-top:2px solid var(--line2);max-height:min(64vh,460px);overflow-y:auto;display:none;
  padding:10px 14px 16px;box-shadow:0 -8px 24px rgba(0,0,0,.25);}
.stripmenu.open{display:block;}
.stripmenu a{display:flex;gap:9px;align-items:baseline;text-decoration:none;color:var(--ink);
  padding:9px 8px;border-radius:5px;font:700 10.5px/1.4 var(--mono);letter-spacing:.08em;}
.stripmenu a:hover{background:var(--panel2);}
.stripmenu .mk{color:var(--ac);min-width:14px;flex:none;}
.stripmenu li.on>a{background:var(--ac-f);box-shadow:inset 2.5px 0 0 var(--ac);}
.stripmenu ul{list-style:none;margin:4px 0 0;padding:0;}
.stripmenu .smsec{font:700 8.5px/1 var(--mono);letter-spacing:.22em;color:var(--mut);
  margin:14px 0 6px;}

@media (min-width:1180px){
  .rail{display:block;}
  .page{padding-left:var(--rail-w);}
  .strip,.stripmenu{display:none;}
  body{padding-bottom:0;}
}

/* ---------- masthead ---------- */
.mast{padding:56px 0 10px;}
.eyebrow{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:18px;}
.shelf{font:700 10px/1 var(--mono);letter-spacing:.2em;color:var(--fr-ink);background:var(--fr);
  padding:7px 11px;border-radius:3px;}
.series{font:700 10px/1.6 var(--mono);letter-spacing:.16em;color:var(--mut);}
h1{font:700 clamp(29px,5.2vw,44px)/1.15 var(--disp);margin:0 0 16px;max-width:24ch;
  letter-spacing:-.01em;}
h1 em{color:var(--ac);font-style:italic;}
.standfirst{font:italic 400 17.5px/1.68 var(--disp);color:var(--mut);max-width:calc(var(--measure) * .84);margin:0 0 24px;
  border-left:3px solid var(--ac);padding-left:16px;}

/* ============ HERO: THE QUESTION LINE (the site's signature) ============
   Form: one elenchus drawn as a spine of eight stations, a–h, from an open
   ring (the question) to a closed one (the settled account). Motion idiom:
   CONVERGING APPROXIMATION — two assumption waves travel continuously across
   the full hero, masked to fade as they near the settled end, so the guess is
   always visibly wobbling and always visibly quieting. That layer never rests,
   which is what keeps the hero alive at any glance; over it an inquiry pulse
   runs the spine and lights each station as it passes. All travel is LINEAR —
   an eased cycle rests at both ends and reads as a still image. Every rule
   sits on a bare class so the reduced-motion block reaches all of them. */
.hero{display:block;width:100%;height:auto;margin:16px 0 6px;border:1.5px solid var(--line2);
  border-radius:6px;background:var(--card);}
.hero .h-bg{fill:var(--card);}
.hero .h-rule{stroke:var(--rule-d);stroke-width:1;opacity:.7;}
.hero .h-wave{fill:none;stroke:var(--k3);stroke-width:2.2;opacity:.55;}
.hero .h-wave2{fill:none;stroke:var(--k4);stroke-width:1.6;opacity:.4;}
.hero .h-spine{stroke:var(--fr);stroke-width:3;fill:none;}
.hero .h-open{fill:none;stroke:var(--ac);stroke-width:4;}
.hero .h-close{fill:var(--ac);stroke:var(--ac);stroke-width:3;}
.hero .h-tick{stroke:var(--wire);stroke-width:1.6;}
.hero .h-lab{fill:var(--mut);font:700 12px/1 var(--mono);letter-spacing:.16em;}
.hero .h-cap{fill:var(--wire);font:700 10px/1 var(--mono);letter-spacing:.2em;}
.hero .h-pulse{fill:var(--ac);}
.hero .st-1{fill:var(--k1f);stroke:var(--k1);} .hero .st-2{fill:var(--k3f);stroke:var(--k3);}
.hero .st-3{fill:var(--k4f);stroke:var(--k4);} .hero .st-4{fill:var(--k6f);stroke:var(--k6);}
.hero .st-5{fill:var(--k5f);stroke:var(--k5);} .hero .st-6{fill:var(--k7f);stroke:var(--k7);}
.hero .st-7{fill:var(--k2f);stroke:var(--k2);} .hero .st-8{fill:var(--k8f);stroke:var(--k8);}
.hero .h-node{stroke-width:3;}
@keyframes h-drift{from{transform:translateX(0)}to{transform:translateX(-320px)}}
@keyframes h-drift2{from{transform:translateX(0)}to{transform:translateX(-240px)}}
@keyframes h-run{from{offset-distance:0%}to{offset-distance:100%}}
@keyframes h-lamp{0%,100%{opacity:.30}50%{opacity:.85}}
.hero .h-waveg{animation:h-drift 6s linear infinite;}
.hero .h-waveg2{animation:h-drift2 9s linear infinite;}
.hero .h-pulse{offset-rotate:0deg;animation:h-run 5.2s linear infinite;}
.hero .h-glow{animation:h-lamp 4.4s ease-in-out infinite;}
/* ---------- marks for the other rooms ----------------------------------
   Each room's hero is drawn in the same class vocabulary as the spine, so it
   inherits the palette, the theme switch and the reduced-motion gate below
   without any of that being restated per room. The station hues (st-1..st-8)
   already carry fill and stroke, so a band, ribbon or bar tinted with one
   picks up both sides of the pair. */
.hero .h-stem{fill:none;stroke:var(--line2);stroke-width:1.4;opacity:.75;}
.hero .h-chord{stroke:var(--line2);stroke-width:1.2;opacity:.7;}
.hero .h-band{opacity:.55;stroke-width:1.5;}
.hero .h-ribbon{opacity:.8;stroke-width:1.5;}
.hero .h-bar{opacity:.7;stroke-width:1.2;}
.hero .h-slip{fill:var(--bg);stroke:var(--line2);stroke-width:1.4;}
.hero .h-term{stroke:var(--ac);stroke-width:2.4;}
.hero .h-gloss{stroke:var(--wire);stroke-width:1.4;opacity:.8;}
.hero .h-shade{fill:var(--fr);stroke:var(--fr);stroke-width:1.5;}
.hero .h-spill{fill:var(--ac-f);opacity:.5;}
.hero .h-page{fill:var(--bg);stroke:var(--line2);stroke-width:1.6;}

@media (prefers-reduced-motion: reduce){
  .hero .h-waveg,.hero .h-waveg2,.hero .h-pulse,.hero .h-glow,.hero *{animation:none !important;}
}

/* ---------- the facet graph -------------------------------------------
   Three columns walked left to right. Only the selected path is ever drawn,
   so the page stays legible at 2,500 categories where a full graph could not.
   The columns scroll independently and each keeps its own height, because the
   three lists differ in length by an order of magnitude. */
.gwrap{margin:26px 0 0;}
.gintro{max-width:var(--measure);}
.gcount{font:400 15.5px/1.6 var(--sans);color:var(--mut);margin:0 0 .35em;}
.gcount b{color:var(--ink);font-variant-numeric:tabular-nums;}
.gsub{font:400 14.5px/1.62 var(--sans);color:var(--mut);margin:0 0 4px;}
.gcrumb{list-style:none;display:flex;flex-wrap:wrap;gap:7px;align-items:center;
  margin:16px 0 12px;padding:0;min-height:30px;}
.gcrumb li{display:flex;align-items:center;gap:7px;}
.gcrumb li::after{content:"›";color:var(--wire);}
.gcrumb li:last-child::after{content:"";}
.gcrumb button{cursor:pointer;border:1.5px solid var(--line2);background:var(--card);
  color:var(--ink);border-radius:999px;padding:5px 12px;
  font:700 10px/1 var(--mono);letter-spacing:.1em;}
.gcrumb button:hover{border-color:var(--ac);color:var(--ac);}
.gcols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;
  align-items:start;margin-top:4px;}
.gcol{border:1.5px solid var(--line2);border-radius:10px;background:var(--card);
  box-shadow:var(--shadow);padding:12px 12px 10px;min-width:0;}
.gch{font:700 9.5px/1 var(--mono);letter-spacing:.2em;color:var(--mut);
  margin:0 0 9px;text-transform:uppercase;display:flex;justify-content:space-between;gap:8px;}
.gn{color:var(--wire);font-variant-numeric:tabular-nums;letter-spacing:.06em;}
.glist{list-style:none;margin:0;padding:0;max-height:60vh;overflow-y:auto;
  scrollbar-width:thin;overscroll-behavior:contain;}
.glist li{margin:0 0 3px;}
.gitem{width:100%;display:flex;align-items:baseline;gap:9px;cursor:pointer;text-align:left;
  border:1.5px solid transparent;border-radius:7px;background:none;color:var(--ink);
  padding:calc(6px * var(--density)) 9px;font:400 14px/1.4 var(--sans);}
.gitem:hover{background:var(--bg);border-color:var(--line2);}
.gitem[aria-selected="true"]{background:var(--bg);border-color:var(--ac);
  box-shadow:inset 2.5px 0 0 var(--ac);}
.gitem .gc{margin-left:auto;flex:none;color:var(--wire);
  font:700 10.5px/1.5 var(--mono);font-variant-numeric:tabular-nums;}
/* The controlled first-slot vocabulary is the cross-cutting layer, so it is
   marked rather than left looking like any other free tag. */
.gitem .gmech{flex:none;width:7px;height:7px;border-radius:50%;
  background:var(--ac);align-self:center;}
.gitem .gopen{flex:none;color:var(--ac);font:700 9.5px/1.5 var(--mono);
  letter-spacing:.1em;opacity:0;}
.gitem:hover .gopen,.gitem:focus-visible .gopen{opacity:1;}
.gempty{font:400 13.5px/1.55 var(--sans);color:var(--wire);margin:2px 4px 4px;}
.gnote{font:400 13px/1.6 var(--sans);color:var(--wire);max-width:var(--measure);margin:16px 0 0;}
@media (max-width:860px){
  .gcols{grid-template-columns:minmax(0,1fr);}
  .glist{max-height:44vh;}
}

/* ---------- census strip (collection at a glance) ---------- */
.census{margin:22px 0 0;border:1.5px solid var(--line2);border-radius:8px;background:var(--card);
  box-shadow:var(--shadow);overflow-x:auto;}
.census .xrow{display:flex;min-width:max-content;}
.census .xc{flex:1 1 auto;padding:11px 18px 12px;border-right:1px solid var(--line);}
.census .xc:last-child{border-right:0;}
.census .xk{display:block;font:700 8.5px/1 var(--mono);letter-spacing:.2em;color:var(--mut);
  margin-bottom:7px;}
.census .xv{display:block;font:700 17px/1.1 var(--mono);color:var(--ink);
  font-variant-numeric:tabular-nums;}
.census .xv i{font-style:normal;color:var(--ac);}

/* ---------- finder: search + filters + sort ---------- */
.finder{margin:30px 0 8px;border:1.5px solid var(--line2);border-radius:10px;background:var(--card);
  box-shadow:var(--shadow);overflow:hidden;}
.findbar{display:flex;align-items:stretch;gap:0;border-bottom:1.5px solid var(--line);}
.findbar label{display:flex;align-items:center;font:700 9.5px/1 var(--mono);letter-spacing:.2em;
  color:var(--fr-ink);background:var(--fr);padding:0 14px;flex:none;}
#q{flex:1 1 auto;min-width:0;border:0;background:transparent;color:var(--ink);
  font:16px/1.5 var(--sans);padding:14px 14px;}
#q::placeholder{color:var(--wire);}
#q:focus{outline:none;background:var(--panel2);}
.findbar .qclear{border:0;background:none;color:var(--mut);font:700 10px/1 var(--mono);
  letter-spacing:.14em;padding:0 14px;cursor:pointer;flex:none;}
.findbar .qclear:hover{color:var(--ac);}
.facets{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));
  gap:0;}
.facet{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:12px 14px;
  min-width:0;}
.facet:last-child{border-right:0;}
.facet>b{display:block;font:700 8.5px/1 var(--mono);letter-spacing:.2em;color:var(--mut);
  margin-bottom:9px;}
.chips{display:flex;flex-wrap:wrap;gap:6px;max-height:132px;overflow-y:auto;
  scrollbar-width:thin;}
.chip{font:700 10px/1 var(--mono);letter-spacing:.06em;color:var(--mut);background:var(--panel2);
  border:1.5px solid var(--line);border-radius:999px;padding:6px 10px;cursor:pointer;
  display:inline-flex;gap:6px;align-items:center;}
.chip:hover{border-color:var(--ac);color:var(--ink);}
.chip[aria-pressed="true"]{background:var(--ac-f);border-color:var(--ac);color:var(--ink);}
.chip .n{color:var(--wire);font-variant-numeric:tabular-nums;}
.chip[aria-pressed="true"] .n{color:var(--ac);}
.findfoot{display:flex;flex-wrap:wrap;gap:12px;align-items:center;padding:11px 14px;
  background:var(--panel2);}
.findfoot .count{font:700 10.5px/1 var(--mono);letter-spacing:.12em;color:var(--ink);
  font-variant-numeric:tabular-nums;}
.findfoot .count i{font-style:normal;color:var(--ac);}
.seg{display:inline-flex;border:1.5px solid var(--line2);border-radius:6px;overflow:hidden;
  margin-left:auto;}
.seg button{border:0;background:var(--card);color:var(--mut);font:700 9.5px/1 var(--mono);
  letter-spacing:.12em;padding:8px 11px;cursor:pointer;border-right:1px solid var(--line);}
.seg button:last-child{border-right:0;}
.seg button[aria-pressed="true"]{background:var(--ac);color:var(--fr-ink);}
select.sortsel{font:700 9.5px/1 var(--mono);letter-spacing:.1em;color:var(--ink);
  background:var(--card);border:1.5px solid var(--line2);border-radius:6px;padding:8px 10px;
  cursor:pointer;}
.reset{font:700 9.5px/1 var(--mono);letter-spacing:.12em;color:var(--mut);background:none;
  border:1.5px solid var(--line);border-radius:6px;padding:8px 11px;cursor:pointer;}
.reset:hover{border-color:var(--ac);color:var(--ac);}

/* ---------- the shelf: one row per explanation ---------- */
.shelf-list{list-style:none;margin:22px 0 40px;padding:0;}
.shelf-list.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(310px,100%),1fr));
  gap:14px;}
/* The row seats the link and the save control side by side; the link itself is
   the inner grid carrying shelfmark, title, question and metadata. */
.row{border-top:1.5px solid var(--line);display:grid;
  grid-template-columns:minmax(0,1fr) auto;align-items:start;}
.shelf-list.grid .row{border:1.5px solid var(--line2);border-radius:9px;background:var(--card);
  box-shadow:var(--shadow);}
.row>a{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 16px;text-decoration:none;
  color:var(--ink);padding:16px 12px 15px;align-items:baseline;min-width:0;}
.shelf-list.grid .row>a{grid-template-columns:minmax(0,1fr);padding:15px 16px 16px;}
.row>a:hover{background:var(--card);}
.shelf-list.grid .row>a:hover{background:var(--panel2);}
.row .save{padding:18px 12px 0 8px;}
.shelf-list.grid .row .save{padding:15px 14px 0 0;}
.row .sm{font:700 10.5px/1.6 var(--mono);letter-spacing:.08em;color:var(--ac);flex:none;
  font-variant-numeric:tabular-nums;}
.row .rt{font:700 20px/1.3 var(--disp);}
.row .rq{grid-column:2;font:italic 400 14.5px/1.6 var(--disp);color:var(--mut);max-width:66ch;}
.shelf-list.grid .row .rq{grid-column:1;}
.row .rmeta{grid-column:2;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;
  margin-top:7px;}
.shelf-list.grid .row .rmeta{grid-column:1;}
.tagchip{font:700 9px/1 var(--mono);letter-spacing:.1em;color:var(--ac);border:1px solid var(--ac);
  border-radius:999px;padding:4px 8px;background:var(--ac-f);}
.catchip{font:700 9px/1 var(--mono);letter-spacing:.1em;color:var(--mut);border:1px solid var(--line2);
  border-radius:999px;padding:4px 8px;background:var(--panel2);}
.domchip{font:700 9px/1 var(--mono);letter-spacing:.14em;color:var(--fr-ink);background:var(--fr);
  border-radius:3px;padding:4px 8px;}
.mins{font:700 9px/1 var(--mono);letter-spacing:.1em;color:var(--wire);
  font-variant-numeric:tabular-nums;}
/* an explanation you have already opened, marked quietly */
.readmark{font:700 9px/1 var(--mono);letter-spacing:.14em;color:var(--k7);
  border:1px solid var(--k7);border-radius:999px;padding:4px 8px;background:var(--k7f);}
.row.isread .rt{color:var(--mut);}
.savebtn{border:1.5px solid var(--line2);background:var(--card);color:var(--mut);border-radius:6px;
  font:700 9px/1 var(--mono);letter-spacing:.12em;padding:6px 9px;cursor:pointer;}
.savebtn:hover{border-color:var(--ac);color:var(--ac);}
.savebtn[aria-pressed="true"]{background:var(--ac);border-color:var(--ac);color:var(--fr-ink);}
.morewrap{display:flex;justify-content:center;margin:-24px 0 44px;}
.morebtn{font:700 10.5px/1 var(--mono);letter-spacing:.16em;color:var(--ink);background:var(--card);
  border:1.5px solid var(--line2);border-radius:999px;padding:13px 26px;cursor:pointer;
  box-shadow:var(--shadow);}
.morebtn:hover{border-color:var(--ac);color:var(--ac);}
.empty{border:1.5px dashed var(--line2);border-radius:9px;padding:28px 22px;background:var(--card);
  margin:22px 0 40px;}
.empty b{display:block;font:700 17px/1.4 var(--disp);margin-bottom:6px;}
.empty p{color:var(--mut);margin:0;}
mark{background:var(--ac-f);color:var(--ink);border-bottom:1.5px solid var(--ac);
  padding:0 1px;border-radius:2px;}

/* ---------- article: stations ---------- */
.station{margin:calc(40px * var(--density)) 0;background:var(--card);border:1.5px solid var(--line2);border-radius:10px;
  box-shadow:var(--shadow);scroll-margin-top:18px;overflow:hidden;}
.stationhead{display:flex;align-items:center;gap:14px;padding:14px 20px;
  border-bottom:2px solid var(--fr);background:linear-gradient(to bottom,var(--panel2),transparent);}
.stationhead .mk{font:700 14px/1 var(--mono);letter-spacing:.06em;color:var(--fr-ink);
  background:var(--fr);padding:8px 11px;border-radius:4px;flex:none;}
.stationhead h2{font:700 clamp(19px,3.4vw,24px)/1.25 var(--disp);margin:0;flex:1 1 auto;
  min-width:0;}
.stationhead .lbl{font:700 9px/1 var(--mono);letter-spacing:.2em;color:var(--mut);flex:none;}
.stationhead .anchor{font:700 11px/1 var(--mono);color:var(--wire);text-decoration:none;
  border:1.5px solid var(--line);border-radius:5px;padding:6px 8px;flex:none;}
.stationhead .anchor:hover{color:var(--ac);border-color:var(--ac);}
.stationbody{padding:calc(20px * var(--density)) 22px calc(8px * var(--density));}
.station[data-kind="open"] .stationhead .mk{background:var(--k1);}
.station[data-kind="work"] .stationhead .mk{background:var(--k3);}
.station[data-kind="figure"] .stationhead .mk{background:var(--k4);}
.station[data-kind="correct"] .stationhead .mk{background:var(--k6);}
.station[data-kind="plate"] .stationhead .mk{background:var(--k5);}
.station[data-kind="gain"] .stationhead .mk{background:var(--k7);}
.station[data-kind="onward"] .stationhead .mk{background:var(--k2);}
.station[data-kind="terms"] .stationhead .mk{background:var(--k8);}
.station[data-kind="open"] .stationhead{border-bottom-color:var(--k1);}
.station[data-kind="work"] .stationhead{border-bottom-color:var(--k3);}
.station[data-kind="figure"] .stationhead{border-bottom-color:var(--k4);}
.station[data-kind="correct"] .stationhead{border-bottom-color:var(--k6);}
.station[data-kind="plate"] .stationhead{border-bottom-color:var(--k5);}
.station[data-kind="gain"] .stationhead{border-bottom-color:var(--k7);}
.station[data-kind="onward"] .stationhead{border-bottom-color:var(--k2);}
.station[data-kind="terms"] .stationhead{border-bottom-color:var(--k8);}

/* ---------- the question, set as a question ---------------------------
   The one line the whole page turns on, so it is the one thing on the page
   that is always moving. Colour comes from sitegen/question.py as four inline
   tokens on the element (--q-l/--q-lf light, --q-d/--q-df dark); this is the
   only place that knows which pair is showing, hence the four blocks below.
   Every hue is luminance-matched, so a green question and a blue one carry the
   same weight rather than one shouting.

   Two layers, both persistent: a wide tinted band drifting across the box
   (::before, the area) and a light running down the rail (::after, the pulse).
   Neither ever rests -- the wash uses `linear ... alternate` rather than an
   easing that would slow to a stop at each turn, and the rail's gradient is
   `repeating-` so its travel loops seamlessly instead of snapping back. */
.askbox{position:relative;isolation:isolate;overflow:hidden;
  /* Scales with the reader's text-size setting instead of pinning 20px, and is
     set in the TEXT face rather than the display face: a display face such as
     Irvin has no true italic, so an oblique would be synthesised and look poor
     at this size. In the house setting both tokens are Georgia, so this changes
     nothing there. */
  font:italic 400 calc(var(--fs-base) * 1.21)/1.6 var(--sans);color:var(--ink);
  padding:16px 20px 16px 26px;margin:0 0 calc(22px * var(--density));max-width:calc(var(--measure) * .84);border-radius:9px;
  background:var(--qkf);
  --qk:var(--q-l);--qkf:var(--q-lf);--qb:var(--q-lb);--qop:.55;}
@media (prefers-color-scheme: dark){.askbox{--qk:var(--q-d);--qkf:var(--q-df);--qb:var(--q-db);--qop:.42;}}
:root[data-theme="light"] .askbox{--qk:var(--q-l);--qkf:var(--q-lf);--qb:var(--q-lb);--qop:.55;}
:root[data-theme="dark"] .askbox{--qk:var(--q-d);--qkf:var(--q-df);--qb:var(--q-db);--qop:.42;}

/* the drifting band. inset is negative so the band still covers the corners
   when it is rotated or scaled; overflow:hidden on the box does the clipping.
   z-index:-1 under `isolation:isolate` puts it above the box's own background
   but behind the text, without escaping to sit behind the page. */
/* THREE bands, not one. Surface area is the lever that actually makes motion
   read: a single band leaves most of the box static no matter how opaque it is,
   while a repeating gradient puts far more of the surface in motion at the same
   peak opacity -- which matters most in dark mode, where text contrast caps how
   opaque the band may ever be. The band colour and opacity are per-theme tokens
   for the same reason (see question.py). */
.askbox::before{content:"";position:absolute;inset:-55%;z-index:-1;pointer-events:none;
  background:repeating-linear-gradient(var(--qang),
    transparent 0 6%,var(--qb) 17%,transparent 28% 34%);
  opacity:var(--qop);}
/* the rail */
.askbox::after{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  transform-origin:top center;
  background:repeating-linear-gradient(180deg,var(--qk) 0 34px,var(--qkf) 52px,var(--qk) 70px);}

@keyframes qa0{from{transform:translate3d(calc(var(--qdir) * -22%),0,0);}to{transform:translate3d(calc(var(--qdir) * 22%),0,0);}}
@keyframes qa1{from{transform:translate3d(0,calc(var(--qdir) * -26%),0);}to{transform:translate3d(0,calc(var(--qdir) * 26%),0);}}
@keyframes qa2{from{transform:translate3d(-19%,-19%,0);}to{transform:translate3d(19%,19%,0);}}
@keyframes qa3{from{transform:rotate(0deg);}to{transform:rotate(calc(var(--qdir) * 360deg));}}
@keyframes qa4{0%{transform:scale(1);opacity:.17;}50%{transform:scale(1.4);opacity:.34;}100%{transform:scale(1);opacity:.17;}}
@keyframes qa5{from{transform:translate3d(-21%,7%,0) skewX(-7deg);}to{transform:translate3d(21%,-7%,0) skewX(7deg);}}
@keyframes qa6{0%{transform:translate3d(18%,0,0);}25%{transform:translate3d(0,18%,0);}50%{transform:translate3d(-18%,0,0);}75%{transform:translate3d(0,-18%,0);}100%{transform:translate3d(18%,0,0);}}
@keyframes qa7{from{transform:rotate(calc(var(--qdir) * -14deg));}to{transform:rotate(calc(var(--qdir) * 14deg));}}
@keyframes qa8{0%{transform:scale(.9);opacity:.31;}55%{transform:scale(1.55);opacity:.14;}100%{transform:scale(.9);opacity:.31;}}
@keyframes qa9{from{transform:rotate(-6deg) scale(1.05);}to{transform:rotate(6deg) scale(1.25);}}
@keyframes qa10{from{transform:translate3d(-19%,19%,0);}to{transform:translate3d(19%,-19%,0);}}
@keyframes qa11{0%{transform:rotate(0deg) scale(1);}50%{transform:rotate(calc(var(--qdir) * 180deg)) scale(1.3);}100%{transform:rotate(calc(var(--qdir) * 360deg)) scale(1);}}
@keyframes qa12{0%{transform:skewX(-9deg) skewY(0deg);}33%{transform:skewX(0deg) skewY(6deg);}66%{transform:skewX(9deg) skewY(0deg);}100%{transform:skewX(-9deg) skewY(0deg);}}
@keyframes qa13{from{transform:scaleY(.75);}to{transform:scaleY(1.45);}}
@keyframes qa14{from{transform:scaleX(.7);}to{transform:scaleX(1.5);}}
@keyframes qa15{0%{transform:scale(1) rotate(0deg);opacity:.20;}50%{transform:scale(1.3) rotate(calc(var(--qdir) * 8deg));opacity:.33;}100%{transform:scale(1) rotate(0deg);opacity:.20;}}
@keyframes qa16{0%{transform:translate3d(-24%,0,0);opacity:.12;}50%{opacity:.34;}100%{transform:translate3d(24%,0,0);opacity:.12;}}
@keyframes qa17{0%{transform:rotate(0deg) translate3d(-14%,0,0);}50%{transform:rotate(calc(var(--qdir) * 180deg)) translate3d(14%,0,0);}100%{transform:rotate(calc(var(--qdir) * 360deg)) translate3d(-14%,0,0);}}
@keyframes qa18{from{transform:skewY(-6deg) translate3d(0,-14%,0);}to{transform:skewY(6deg) translate3d(0,14%,0);}}
@keyframes qa19{0%{transform:translate3d(-9%,-9%,0);opacity:.19;}50%{transform:translate3d(9%,9%,0);opacity:.32;}100%{transform:translate3d(-9%,-9%,0);opacity:.19;}}
@keyframes qr0{from{background-position:0 0;} to{background-position:0 70px;}}
@keyframes qr1{from{background-position:0 70px;} to{background-position:0 0;}}
@keyframes qr2{0%{opacity:1;}50%{opacity:.32;}100%{opacity:1;}}
@keyframes qr3{0%{transform:scaleY(1);}50%{transform:scaleY(.45);}100%{transform:scaleY(1);}}

.qv0::before{animation:qa0 var(--qdur) linear infinite alternate;}
.qv1::before{animation:qa1 var(--qdur) linear infinite alternate;}
.qv2::before{animation:qa2 var(--qdur) linear infinite alternate;}
.qv3::before{animation:qa3 calc(var(--qdur) * 2.4) linear infinite;}
.qv4::before{animation:qa4 var(--qdur) ease-in-out infinite;}
.qv5::before{animation:qa5 var(--qdur) linear infinite alternate;}
.qv6::before{animation:qa6 var(--qdur) linear infinite;}
.qv7::before{animation:qa7 var(--qdur) linear infinite alternate;}
.qv8::before{animation:qa8 var(--qdur) ease-in-out infinite;}
.qv9::before{animation:qa9 var(--qdur) linear infinite alternate;}
.qv10::before{animation:qa10 var(--qdur) linear infinite alternate;}
.qv11::before{animation:qa11 calc(var(--qdur) * 2.4) linear infinite;}
.qv12::before{animation:qa12 var(--qdur) linear infinite;}
.qv13::before{animation:qa13 var(--qdur) linear infinite alternate;}
.qv14::before{animation:qa14 var(--qdur) linear infinite alternate;}
.qv15::before{animation:qa15 var(--qdur) ease-in-out infinite;}
.qv16::before{animation:qa16 var(--qdur) linear infinite;}
.qv17::before{animation:qa17 calc(var(--qdur) * 2.4) linear infinite;}
.qv18::before{animation:qa18 var(--qdur) linear infinite alternate;}
.qv19::before{animation:qa19 var(--qdur) ease-in-out infinite;}
.qv0::after,.qv4::after,.qv8::after,.qv12::after,.qv16::after{animation:qr0 var(--qrdur) linear infinite;}
.qv1::after,.qv5::after,.qv9::after,.qv13::after,.qv17::after{animation:qr1 var(--qrdur) linear infinite;}
.qv2::after,.qv6::after,.qv10::after,.qv14::after,.qv18::after{animation:qr2 var(--qrdur) linear infinite;}
.qv3::after,.qv7::after,.qv11::after,.qv15::after,.qv19::after{animation:qr3 var(--qrdur) linear infinite;}

/* Motion is decorative, so it must actually stop when asked. This block sits
   AFTER the rules it overrides on purpose: the .qvN selectors above are (0,1,1)
   like these, so ordering is what decides it. Stopped, the band rests as a
   diagonal wash and the rail as a graded edge -- a composed frame, not a
   half-drawn one. */
@media (prefers-reduced-motion: reduce){
  .askbox::before,.askbox::after{animation:none !important;}
}

/* annotation slips — the analogy, its limit, the correction */
.slip{position:relative;margin:20px 0 20px;padding:15px 17px 3px;border:1.5px solid var(--line2);
  border-left:4px solid var(--wire);border-radius:6px;background:var(--panel2);max-width:calc(var(--measure) * 1.06);}
.slip p{font-size:15.5px;margin-bottom:.85em;}
.slipchip{position:absolute;top:-9px;left:12px;font:700 8.5px/1 var(--mono);letter-spacing:.2em;
  padding:4px 8px;border-radius:3px;color:var(--fr-ink);background:var(--wire);}
.slip-figure{border-left-color:var(--k4);} .slip-figure .slipchip{background:var(--k4);}
.slip-limit{border-left-color:var(--k6);border-style:dashed;}
.slip-limit .slipchip{background:var(--k6);}
.slip-gain{border-left-color:var(--k7);} .slip-gain .slipchip{background:var(--k7);}

/* ---------- diagram plate ---------- */
/* The figure draws its own titled frame; the plate supplies only the border,
   the kinds it uses, the reading note and the enlarge control. */
.plate{margin:8px 0 10px;border:2px solid var(--fr);border-radius:10px;background:var(--card);
  box-shadow:var(--shadow);overflow:hidden;}
.zoombtn{font:700 9.5px/1 var(--mono);letter-spacing:.12em;color:var(--ink);background:var(--code-bg);
  border:1.5px solid var(--line2);border-radius:5px;padding:7px 11px;cursor:pointer;flex:none;
  margin-left:auto;}
.zoombtn:hover{border-color:var(--ac);color:var(--ac);}
/* A figure is drawn at whatever width its content needs, so forcing every one
   to the column made apparent text size inversely proportional to how wide the
   diagram happened to be -- a 2700-unit figure landed its labels at a third the
   size of an 800-unit one. Instead: never enlarge a figure past the size it was
   drawn at, and never shrink one below two-thirds of it. A figure too wide for
   the column scrolls within its own plate, and the lightbox is still there for
   a proper look. --vbw is written onto the element by the generator. */
.figsvg{cursor:zoom-in;background:var(--card);padding:10px 12px 2px;
  overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;}
.figsvg svg{display:block;height:auto;width:100%;
  max-width:calc(var(--vbw, 1200) * 1px);
  min-width:calc(var(--vbw, 0) * .66px);
  margin-inline:auto;}
/* The lightbox clone must be free to zoom, so the reading-size clamp is lifted. */
.lbstage svg{max-width:none;min-width:0;}
.figsvg:focus-visible{outline:2px solid var(--ac);outline-offset:-4px;}
.platefoot{display:flex;flex-wrap:wrap;gap:7px 15px;padding:8px 14px 6px;align-items:center;
  border-top:1.5px solid var(--line);background:linear-gradient(to top,var(--panel2),transparent);}
.lgword{font:800 9px/1 var(--mono);letter-spacing:.22em;color:var(--ac);}
.lg{display:inline-flex;align-items:center;gap:7px;font:600 10.5px/1.5 var(--mono);color:var(--mut);}
.lg i{width:13px;height:13px;border-radius:3px;border:2px solid;display:inline-block;flex:none;}
.lg.t-k1 i{background:var(--k1f);border-color:var(--k1);}
.lg.t-k2 i{background:var(--k2f);border-color:var(--k2);}
.lg.t-k3 i{background:var(--k3f);border-color:var(--k3);}
.lg.t-k4 i{background:var(--k4f);border-color:var(--k4);}
.lg.t-k5 i{background:var(--k5f);border-color:var(--k5);}
.lg.t-k6 i{background:var(--k6f);border-color:var(--k6);}
.lg.t-k7 i{background:var(--k7f);border-color:var(--k7);}
.lg.t-k8 i{background:var(--k8f);border-color:var(--k8);}
.plate figcaption{padding:8px 16px 14px;}
.plate figcaption p{font-size:13.5px;line-height:1.62;color:var(--mut);margin:0 0 .7em;
  max-width:88ch;}
.plate figcaption b{color:var(--ink);font:700 9.5px/1 var(--mono);letter-spacing:.18em;
  margin-right:7px;text-transform:uppercase;}

/* ---------- lightbox: zoom + pan ---------- */
.lb{position:fixed;inset:0;z-index:90;display:none;background:rgba(12,10,8,.82);padding:18px;}
:root[data-theme="dark"] .lb{background:rgba(0,0,0,.88);}
.lb.open{display:flex;flex-direction:column;}
.lbbar{display:flex;align-items:center;gap:10px;margin:0 auto 10px;width:min(1320px,100%);
  flex-wrap:wrap;}
.lbtitle{font:700 12px/1.4 var(--mono);letter-spacing:.1em;color:#f2eee2;flex:1 1 auto;min-width:0;}
.lbbtn{font:700 10.5px/1 var(--mono);letter-spacing:.14em;color:#f2eee2;background:transparent;
  border:1.5px solid #8a8375;border-radius:5px;padding:8px 12px;cursor:pointer;flex:none;}
.lbbtn:hover{border-color:#d3a24a;color:#d3a24a;}
.lbstage{flex:1 1 auto;overflow:hidden;margin:0 auto;width:min(1320px,100%);background:var(--card);
  border:2px solid var(--fr);border-radius:8px;position:relative;touch-action:none;cursor:grab;}
.lbstage.grabbing{cursor:grabbing;}
.lbstage>div{position:absolute;top:0;left:0;transform-origin:0 0;padding:12px;}
.lbstage svg{display:block;width:100%;height:auto;}
.lbhint{font:700 9.5px/1.5 var(--mono);letter-spacing:.12em;color:#a8a094;text-align:center;
  margin-top:8px;}

/* ---------- code chrome ---------- */
.codeblk{margin:18px 0 22px;border:1.5px solid var(--line2);border-radius:8px;overflow:hidden;
  background:var(--code-bg);box-shadow:var(--shadow);max-width:88ch;}
.codebar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px;
  background:var(--fr);}
.codelang{font:700 9.5px/1.5 var(--mono);letter-spacing:.18em;color:var(--fr-ink);}
.copybtn{font:700 9.5px/1 var(--mono);letter-spacing:.12em;color:var(--fr-ink);background:transparent;
  border:1.5px solid rgba(255,255,255,.45);border-radius:4px;padding:6px 10px;cursor:pointer;flex:none;}
.copybtn.ok{color:#dcf3d2;border-color:#dcf3d2;}
.codeblk pre{margin:0;padding:14px 16px;overflow-x:auto;font:12.6px/1.6 var(--mono);
  color:var(--code-ink);}
.codeblk pre code{background:none;border:0;padding:0;font-size:1em;}

/* ---------- interactive tables ---------- */
.tblwrap{margin:18px 0 24px;border:1.5px solid var(--line2);border-radius:8px;overflow-x:auto;
  background:var(--card);box-shadow:var(--shadow);}
table.itable{border-collapse:collapse;width:100%;font-size:14.5px;color:var(--ink);}
.itable th{position:relative;text-align:left;font:700 10px/1.5 var(--mono);letter-spacing:.12em;
  text-transform:uppercase;color:var(--fr-ink);background:var(--fr);padding:10px 26px 10px 13px;
  cursor:pointer;user-select:none;border-right:1px solid rgba(255,255,255,.22);white-space:nowrap;}
.itable th:last-child{border-right:0;}
.itable th:hover .thlbl{text-decoration:underline;}
.itable th:focus-visible{outline:2px solid var(--fr-ink);outline-offset:-3px;}
.itable th .sortmark{position:absolute;right:16px;top:50%;transform:translateY(-50%);opacity:.8;}
.itable th .rz{position:absolute;right:0;top:0;bottom:0;width:9px;cursor:col-resize;
  touch-action:none;}
.itable th .rz:hover{background:rgba(255,255,255,.25);}
/* colour is set explicitly: these pages render in quirks mode locally, where a
   table does not reliably inherit colour from its ancestors */
.itable td{padding:10px 13px;border-top:1px solid var(--line);vertical-align:top;line-height:1.55;
  color:var(--ink);overflow-wrap:break-word;}
.itable td a{color:var(--ac);}
.itable tbody tr:nth-child(odd) td{background:color-mix(in srgb,var(--panel2) 45%,transparent);}
.itable tbody tr:hover td{background:var(--ac-f);}
.itable td .sm{font:700 11px/1.5 var(--mono);color:var(--ac);font-variant-numeric:tabular-nums;}

/* ---------- onward + related + prev/next ---------- */
.onward{list-style:none;margin:6px 0 18px;padding:0;}
.onward li{position:relative;padding:9px 4px 9px 30px;border-bottom:1px dashed var(--line2);
  font-size:15.5px;line-height:1.6;max-width:78ch;}
.onward li::before{content:"";position:absolute;left:6px;top:17px;width:12px;height:2px;
  background:var(--k2);}
.related{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(260px,100%),1fr));gap:12px;
  margin:14px 0 8px;}
.relcard{border:1.5px solid var(--line2);border-radius:8px;background:var(--card);padding:13px 15px;
  text-decoration:none;color:var(--ink);display:block;}
.relcard:hover{border-color:var(--ac);}
.relcard .sm{font:700 10px/1.6 var(--mono);letter-spacing:.08em;color:var(--ac);}
.relcard b{display:block;font:700 16px/1.35 var(--disp);margin:2px 0 5px;}
.relcard span{font:400 12.5px/1.5 var(--mono);color:var(--mut);}
.pager{display:flex;flex-wrap:wrap;gap:12px;margin:30px 0 10px;}
.pager a{flex:1 1 260px;border:1.5px solid var(--line2);border-radius:8px;background:var(--card);
  padding:13px 16px;text-decoration:none;color:var(--ink);}
.pager a:hover{border-color:var(--ac);}
.pager .dir{display:block;font:700 8.5px/1 var(--mono);letter-spacing:.22em;color:var(--mut);
  margin-bottom:6px;}
.pager .pt{font:700 17px/1.3 var(--disp);}
.pager a.next{text-align:right;}

/* ---------- browse / glossary / stats ---------- */
.grouphead{display:flex;align-items:baseline;gap:12px;margin:34px 0 2px;padding-bottom:9px;
  border-bottom:2px solid var(--fr);}
.grouphead h2{font:700 22px/1.3 var(--disp);margin:0;}
.grouphead .n{font:700 11px/1 var(--mono);letter-spacing:.1em;color:var(--mut);margin-left:auto;
  font-variant-numeric:tabular-nums;}
.cloud{display:flex;flex-wrap:wrap;gap:9px;margin:18px 0 34px;}
.cloud a{text-decoration:none;color:var(--ink);border:1.5px solid var(--line2);border-radius:999px;
  padding:7px 13px;background:var(--card);font-family:var(--mono);display:inline-flex;gap:8px;
  align-items:baseline;}
.cloud a:hover{border-color:var(--ac);background:var(--ac-f);}
.cloud a .n{color:var(--wire);font-size:10px;font-variant-numeric:tabular-nums;}
.bar{height:9px;border-radius:999px;background:var(--ac);min-width:3px;}
.barrow{display:grid;grid-template-columns:minmax(0,1fr) 46px;gap:10px;align-items:center;
  margin:0 0 9px;}
.barlab{font:700 10.5px/1.5 var(--mono);letter-spacing:.06em;}
.barn{font:700 10.5px/1 var(--mono);color:var(--mut);text-align:right;
  font-variant-numeric:tabular-nums;}
.gterm{border-top:1.5px solid var(--line);padding:14px 4px;}
.gterm dt{font:700 16px/1.4 var(--mono);color:var(--ink);margin-bottom:5px;}
.gterm dd{margin:0;color:var(--mut);max-width:78ch;font-size:15px;}
.gterm .src{display:block;margin-top:7px;font:700 9.5px/1 var(--mono);letter-spacing:.1em;}
.azjump{display:flex;flex-wrap:wrap;gap:5px;margin:16px 0 10px;}
.azjump a{font:700 11px/1 var(--mono);text-decoration:none;color:var(--ink);border:1.5px solid var(--line2);
  border-radius:5px;padding:8px 10px;background:var(--card);}
.azjump a:hover{border-color:var(--ac);color:var(--ac);}

/* ---------- shortcuts overlay ---------- */
.keys{position:fixed;inset:0;z-index:95;display:none;background:rgba(12,10,8,.82);padding:20px;
  align-items:center;justify-content:center;}
:root[data-theme="dark"] .keys{background:rgba(0,0,0,.88);}
.keys.open{display:flex;}
.keysbox{background:var(--card);border:2px solid var(--fr);border-radius:10px;padding:22px 24px;
  max-width:520px;width:100%;max-height:80vh;overflow-y:auto;box-shadow:var(--shadow);}
.keysbox h2{font:700 20px/1.3 var(--disp);margin:0 0 14px;}
.keysbox dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:9px 16px;margin:0;}
.keysbox dt{font:700 11px/1.5 var(--mono);}
.keysbox kbd{background:var(--panel2);border:1.5px solid var(--line2);border-bottom-width:3px;
  border-radius:4px;padding:3px 7px;font:700 11px/1 var(--mono);color:var(--ink);}
.keysbox dd{margin:0;color:var(--mut);font-size:14.5px;}

/* ---------- reading progress + colophon ---------- */
.progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:80;background:transparent;}
.progress i{display:block;height:100%;width:0;background:var(--ac);transition:width .12s linear;}
.colophon{margin:56px 0 42px;border-top:2px solid var(--fr);padding-top:18px;display:flex;
  flex-wrap:wrap;gap:12px;align-items:baseline;justify-content:space-between;}
.colophon .cl{font:700 9.5px/1.8 var(--mono);letter-spacing:.16em;color:var(--mut);}
.homelink{font:700 10.5px/1 var(--mono);letter-spacing:.12em;color:var(--ink);text-decoration:none;
  border:1.5px solid var(--line2);border-radius:999px;padding:9px 14px;background:var(--card);}
.homelink:hover{border-color:var(--ac);color:var(--ac);}

/* ---------- hand-held ---------- */
@media (max-width:640px){
  .col{padding:0 16px;}
  .mast{padding-top:66px;}
  .stationbody{padding:16px 14px 6px;}
  .stationhead{padding:12px 14px;gap:10px;}
  .stationhead .lbl{display:none;}
  .figsvg{margin:8px 8px;padding:4px;}
  .slip{padding:13px 13px 2px;}
  .topctl{top:10px;right:12px;}
  .row>a{grid-template-columns:minmax(0,1fr);}
  .row .rq,.row .rmeta{grid-column:1;}
  .row .save{padding:16px 10px 0 4px;}
  .census .xc{padding:9px 13px 10px;}
  h1{max-width:none;}
}

/* ---------- print ---------- */
@media print{
  .rail,.strip,.stripmenu,.topctl,.lb,.keys,.progress,.finder,.savebtn,.zoombtn,.copybtn,
  .stationhead .anchor,.pager{display:none !important;}
  body{background:#fff;color:#000;padding:0;}
  .page{padding-left:0;}
  .station,.plate,.codeblk,.tblwrap{break-inside:avoid;box-shadow:none;border-color:#999;}
  .hero{max-height:150px;}
  a{color:#000;text-decoration:underline;}
}

/* ===== per-domain article heroes ===== */
/* --- hero: ART — four separation plates drifting through register, registration crosshairs climbing a stepped diagonal --- */
.hero.d-ART .art-ramp{fill:var(--wire);opacity:.4;}
.hero.d-ART .art-cross{stroke:var(--ac);stroke-width:1.6;}
.hero.d-ART .art-track{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-ART .art-dot{mix-blend-mode:multiply;opacity:.62;}
.hero.d-ART .art-dot.k1{fill:var(--k1);} .hero.d-ART .art-dot.k3{fill:var(--k3);}
.hero.d-ART .art-dot.k5{fill:var(--k5);} .hero.d-ART .art-dot.k6{fill:var(--k6);}
:root[data-theme="dark"] .hero.d-ART .art-dot{mix-blend-mode:screen;opacity:.5;}
@keyframes art-glow{0%,100%{opacity:.22}50%{opacity:.48}}
.hero.d-ART .art-glow{animation:art-glow 3.1s linear infinite;}
@keyframes art-drift0{0.00%{transform:translate(0.00px,0.00px)}6.25%{transform:translate(-0.50px,1.49px)}12.50%{transform:translate(-1.93px,2.76px)}18.75%{transform:translate(-4.07px,3.60px)}25.00%{transform:translate(-6.60px,3.90px)}31.25%{transform:translate(-9.13px,3.60px)}37.50%{transform:translate(-11.27px,2.76px)}43.75%{transform:translate(-12.70px,1.49px)}50.00%{transform:translate(-13.20px,0.00px)}56.25%{transform:translate(-12.70px,-1.49px)}62.50%{transform:translate(-11.27px,-2.76px)}68.75%{transform:translate(-9.13px,-3.60px)}75.00%{transform:translate(-6.60px,-3.90px)}81.25%{transform:translate(-4.07px,-3.60px)}87.50%{transform:translate(-1.93px,-2.76px)}93.75%{transform:translate(-0.50px,-1.49px)}100.00%{transform:translate(0.00px,-0.00px)}}@keyframes art-drift1{0.00%{transform:translate(0.00px,0.00px)}6.25%{transform:translate(-1.82px,0.31px)}12.50%{transform:translate(-3.59px,-0.28px)}18.75%{transform:translate(-5.05px,-1.67px)}25.00%{transform:translate(-5.97px,-3.66px)}31.25%{transform:translate(-6.22px,-5.94px)}37.50%{transform:translate(-5.75px,-8.16px)}43.75%{transform:translate(-4.64px,-10.00px)}50.00%{transform:translate(-3.06px,-11.16px)}56.25%{transform:translate(-1.24px,-11.47px)}62.50%{transform:translate(0.53px,-10.88px)}68.75%{transform:translate(1.99px,-9.49px)}75.00%{transform:translate(2.91px,-7.50px)}81.25%{transform:translate(3.16px,-5.22px)}87.50%{transform:translate(2.69px,-2.99px)}93.75%{transform:translate(1.58px,-1.16px)}100.00%{transform:translate(0.00px,0.00px)}}@keyframes art-drift2{0.00%{transform:translate(0.00px,0.00px)}6.25%{transform:translate(-1.24px,-1.76px)}12.50%{transform:translate(-1.40px,-3.70px)}18.75%{transform:translate(-0.46px,-5.55px)}25.00%{transform:translate(1.44px,-7.00px)}31.25%{transform:translate(4.00px,-7.85px)}37.50%{transform:translate(6.85px,-7.96px)}43.75%{transform:translate(9.54px,-7.32px)}50.00%{transform:translate(11.66px,-6.02px)}56.25%{transform:translate(12.90px,-4.26px)}62.50%{transform:translate(13.06px,-2.31px)}68.75%{transform:translate(12.12px,-0.47px)}75.00%{transform:translate(10.22px,0.98px)}81.25%{transform:translate(7.66px,1.83px)}87.50%{transform:translate(4.81px,1.94px)}93.75%{transform:translate(2.13px,1.30px)}100.00%{transform:translate(-0.00px,-0.00px)}}@keyframes art-drift3{0.00%{transform:translate(0.00px,0.00px)}6.25%{transform:translate(1.21px,-1.71px)}12.50%{transform:translate(2.73px,-2.53px)}18.75%{transform:translate(4.33px,-2.33px)}25.00%{transform:translate(5.76px,-1.15px)}31.25%{transform:translate(6.80px,0.83px)}37.50%{transform:translate(7.30px,3.31px)}43.75%{transform:translate(7.18px,5.92px)}50.00%{transform:translate(6.46px,8.25px)}56.25%{transform:translate(5.25px,9.96px)}62.50%{transform:translate(3.73px,10.77px)}68.75%{transform:translate(2.14px,10.58px)}75.00%{transform:translate(0.71px,9.40px)}81.25%{transform:translate(-0.34px,7.42px)}87.50%{transform:translate(-0.84px,4.94px)}93.75%{transform:translate(-0.72px,2.33px)}100.00%{transform:translate(-0.00px,0.00px)}}
.hero.d-ART .art-plate-0{animation:art-drift0 4.6s linear infinite;}.hero.d-ART .art-plate-1{animation:art-drift1 5.3s linear infinite;}.hero.d-ART .art-plate-2{animation:art-drift2 6.1s linear infinite;}.hero.d-ART .art-plate-3{animation:art-drift3 3.9s linear infinite;}
/* --- hero: AST — elliptical orbit carrying eight bodies; star field drifting, one body transiting --- */
.hero.d-AST .ast-star{fill:var(--wire);opacity:.56;}
.hero.d-AST .ast-field2 .ast-star{opacity:.3;fill:var(--k1);}
.hero.d-AST .ast-neb{fill:var(--k1f);opacity:.14;}
.hero.d-AST .ast-neb2 .ast-neb{fill:var(--ac);opacity:.1;}
.hero.d-AST .ast-ring{fill:none;stroke:var(--line2);stroke-width:1.2;opacity:.5;
  stroke-dasharray:3 7;}
.hero.d-AST .ast-track{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-AST .ast-origin{stroke:var(--ac);stroke-width:3;fill:none;}
.hero.d-AST .ast-transit{fill:var(--k1);}
.hero.d-AST .ast-tail{fill:var(--k1f);opacity:.2;}
.hero.d-AST .ast-tail2{fill:var(--ac);opacity:.14;}
@keyframes ast-drift{from{transform:translateX(0)}to{transform:translateX(-1240px)}}
@keyframes ast-drift2{from{transform:translateX(0)}to{transform:translateX(-620px)}}
@keyframes ast-nebdrift{from{transform:translateX(0)}to{transform:translateX(-960px)}}
@keyframes ast-run{from{offset-distance:0%}to{offset-distance:100%}}
.hero.d-AST .ast-field{animation:ast-drift 38s linear infinite;}
.hero.d-AST .ast-field2{animation:ast-drift2 26s linear infinite;}
.hero.d-AST .ast-neb1{animation:ast-nebdrift 22s linear infinite;}
.hero.d-AST .ast-neb2{animation:ast-nebdrift 34s linear infinite reverse;}
.hero.d-AST .ast-transit{offset-rotate:0deg;animation:ast-run 9s linear infinite;}
.hero.d-AST .ast-tail{offset-rotate:0deg;animation:ast-run 9s linear infinite;animation-delay:0.3s;}
.hero.d-AST .ast-tail2{offset-rotate:0deg;animation:ast-run 9s linear infinite;animation-delay:0.6s;}
/* --- hero: BIO — dendritic branch with eight fork stations; nutrient pulses run the twigs, canopy drifts --- */
.hero.d-BIO .bio-leaf{fill:var(--wire);opacity:.48;}
.hero.d-BIO .bio-canopy2 .bio-leaf{opacity:.3;fill:var(--k7);}
.hero.d-BIO .bio-twig{stroke:var(--k7);stroke-width:2;fill:none;opacity:.6;}
.hero.d-BIO .bio-cluster{fill:var(--k7f);stroke:var(--k7);stroke-width:1.4;opacity:.85;}
.hero.d-BIO .bio-trunk{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-BIO .bio-root{stroke:var(--ac);stroke-width:4;fill:none;}
.hero.d-BIO .bio-pulse{fill:var(--ac);}
.hero.d-BIO .bio-pulse-glow{fill:var(--ac);opacity:.62;}
.hero.d-BIO .bio-trunk-pulse{fill:var(--k1);}
.hero.d-BIO .bio-trunk-glow{fill:var(--k1f);opacity:.4;}
@keyframes bio-drift{from{transform:translateX(0)}to{transform:translateX(-1320px)}}
@keyframes bio-drift2{from{transform:translateX(0)}to{transform:translateX(-660px)}}
@keyframes bio-run{from{offset-distance:0%}to{offset-distance:100%}}
@keyframes bio-trunkrun{from{offset-distance:0%}to{offset-distance:100%}}
.hero.d-BIO .bio-canopy{animation:bio-drift 42s linear infinite;}
.hero.d-BIO .bio-canopy2{animation:bio-drift2 29s linear infinite;}
.hero.d-BIO .bio-pulse,.hero.d-BIO .bio-pulse-glow{offset-rotate:0deg;animation:bio-run 3.2s linear infinite;}
.hero.d-BIO .bio-trunk-pulse,.hero.d-BIO .bio-trunk-glow{offset-rotate:0deg;animation:bio-trunkrun 7.5s linear infinite;}
/* --- hero: CDA — rising staircase data bus in four two-wide tiers with byte-boundary stations; packets stream up it, riser beacons flash at each climb --- */
.hero.d-CDA .cda-mem{fill:var(--wire);opacity:.22;}
.hero.d-CDA .cda-pad{fill:var(--panel2);stroke:var(--wire);stroke-width:1;opacity:.7;}
.hero.d-CDA .cda-lane2{stroke:var(--wire);stroke-width:1;opacity:.3;}
.hero.d-CDA .cda-rail{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-CDA .cda-origin{stroke:var(--ac);stroke-width:4;fill:none;}
.hero.d-CDA .cda-beacon{fill:var(--k4);opacity:.18;}
.hero.d-CDA .cda-spark{fill:var(--k4);opacity:0;mix-blend-mode:screen;}
:root[data-theme="light"] .hero.d-CDA .cda-spark{mix-blend-mode:multiply;}
.hero.d-CDA .cda-packet rect{fill:var(--k3f);stroke:var(--k3);stroke-width:1.8;}
.hero.d-CDA .cda-packet path{stroke:var(--k3);stroke-width:1.4;}
.hero.d-CDA .cda-packet2 rect{fill:var(--k4f);stroke:var(--k4);stroke-width:1.5;opacity:.85;}
.hero.d-CDA .cda-packet2 path{stroke:var(--k4);stroke-width:1.2;opacity:.85;}
@keyframes cda-stream{from{offset-distance:0%}to{offset-distance:100%}}
@keyframes cda-flash{0%,72%{opacity:.18}84%{opacity:1}100%{opacity:.18}}
@keyframes cda-spark{0%,70%{opacity:0}82%{opacity:.85}100%{opacity:0}}
.hero.d-CDA .cda-packet{animation:cda-stream 8.4s linear infinite;}
.hero.d-CDA .cda-packet2{animation:cda-stream 5s linear infinite;}
.hero.d-CDA .cda-beacon{animation:cda-flash 2.7s linear infinite;}
.hero.d-CDA .cda-spark{animation:cda-spark 2.7s linear infinite;}
/* --- hero: CHM — hexagonal bond lattice sliding along its axis; eight stations on a zigzag bond chain --- */
.hero.d-CHM .chm-cell{fill:none;stroke:var(--wire);stroke-width:1.1;opacity:.32;}
.hero.d-CHM .chm-lattice2 .chm-cell{opacity:.16;stroke:var(--k3);}
.hero.d-CHM .chm-chain{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-CHM .chm-origin{stroke:var(--ac);stroke-width:4;fill:none;}
@keyframes chm-slide{from{transform:translateX(0)}to{transform:translateX(-57.0px)}}
@keyframes chm-slide2{from{transform:translateX(0)}to{transform:translateX(90.0px)}}
.hero.d-CHM .chm-lattice{animation:chm-slide 11s linear infinite;}
.hero.d-CHM .chm-lattice2{animation:chm-slide2 17s linear infinite;}
/* --- hero: EAR — stratified surface/thermocline/seabed bands with a slanted core transect; swells drift through the layers --- */
.hero.d-EAR .ear-surf{fill:var(--k1f);}
.hero.d-EAR .ear-thermo{fill:var(--k1);opacity:.4;stroke:none;}
.hero.d-EAR .ear-seabed{fill:var(--k2);opacity:.6;stroke:none;}
.hero.d-EAR .ear-transect{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-EAR .ear-origin{stroke:var(--ac);stroke-width:4;fill:none;}
.hero.d-EAR .ear-shimmer line{stroke:var(--ac);stroke-width:1.4;opacity:.22;}
@keyframes ear-swell1{from{transform:translateX(0)}to{transform:translateX(-210.0px)}}
@keyframes ear-swell2{from{transform:translateX(0)}to{transform:translateX(260.0px)}}
@keyframes ear-shimmer-drift{from{transform:translateX(0)}to{transform:translateX(-11.00px)}}
.hero.d-EAR .ear-band1{animation:ear-swell1 7s linear infinite;}
.hero.d-EAR .ear-band2{animation:ear-swell2 12s linear infinite;}
.hero.d-EAR .ear-shimmer{animation:ear-shimmer-drift 1.3s linear infinite;}
/* --- hero: ECO — eight-column ledger series with a running-total rule; ruled columns advance continuously --- */
.hero.d-ECO .eco-ruled{stroke:var(--wire);stroke-width:1.3;opacity:.4;}
.hero.d-ECO .eco-baseline{stroke:var(--line2);stroke-width:1.4;}
.hero.d-ECO .eco-bar{fill:var(--k5f);stroke:var(--k5);stroke-width:1.6;}
.hero.d-ECO .eco-bar-hi{fill:var(--ac);opacity:0;}
.hero.d-ECO .eco-rule{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-ECO .eco-origin{stroke:var(--ac);stroke-width:4;fill:none;}
.hero.d-ECO .eco-sweep{fill:var(--ac);opacity:.34;}
@keyframes eco-advance{from{transform:translateX(0)}to{transform:translateX(-42.0px)}}
.hero.d-ECO .eco-scroll{animation:eco-advance 3.4s linear infinite;}
@keyframes eco-sweep-move{from{transform:translateX(0)}to{transform:translateX(1356.0px)}}
.hero.d-ECO .eco-sweep{animation:eco-sweep-move 6.40s linear infinite;}
@keyframes eco-lift{
  0%{transform:translateY(0)}
  4%{transform:translateY(-7px)}
  10%{transform:translateY(0)}
  100%{transform:translateY(0)}
}
@keyframes eco-glow{
  0%{opacity:0}
  4%{opacity:.6}
  10%{opacity:0}
  100%{opacity:0}
}
.hero.d-ECO .eco-col-0{animation:eco-lift 6.40s linear infinite;animation-delay:-0.637s;}
.hero.d-ECO .eco-col-0 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-0.637s;}
.hero.d-ECO .eco-col-1{animation:eco-lift 6.40s linear infinite;animation-delay:-1.328s;}
.hero.d-ECO .eco-col-1 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-1.328s;}
.hero.d-ECO .eco-col-2{animation:eco-lift 6.40s linear infinite;animation-delay:-2.018s;}
.hero.d-ECO .eco-col-2 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-2.018s;}
.hero.d-ECO .eco-col-3{animation:eco-lift 6.40s linear infinite;animation-delay:-2.708s;}
.hero.d-ECO .eco-col-3 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-2.708s;}
.hero.d-ECO .eco-col-4{animation:eco-lift 6.40s linear infinite;animation-delay:-3.399s;}
.hero.d-ECO .eco-col-4 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-3.399s;}
.hero.d-ECO .eco-col-5{animation:eco-lift 6.40s linear infinite;animation-delay:-4.089s;}
.hero.d-ECO .eco-col-5 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-4.089s;}
.hero.d-ECO .eco-col-6{animation:eco-lift 6.40s linear infinite;animation-delay:-4.780s;}
.hero.d-ECO .eco-col-6 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-4.780s;}
.hero.d-ECO .eco-col-7{animation:eco-lift 6.40s linear infinite;animation-delay:-5.470s;}
.hero.d-ECO .eco-col-7 .eco-bar-hi{animation:eco-glow 6.40s linear infinite;animation-delay:-5.470s;}
/* --- hero: EDU — ruled copybook page, four rows deep; cursive practice loops travel every row, stations descend line by line --- */
.hero.d-EDU .edu-mid{stroke-dasharray:2 6;opacity:.55;}
.hero.d-EDU .edu-track{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-EDU .edu-loop1 path{fill:none;stroke:var(--k4);stroke-width:2.4;stroke-linecap:round;opacity:.68;}
.hero.d-EDU .edu-loop2 path{fill:none;stroke:var(--k2);stroke-width:2.1;stroke-linecap:round;opacity:.5;}
@keyframes edu-run1{from{transform:translateX(0)}to{transform:translateX(-92px)}}
@keyframes edu-run2{from{transform:translateX(0)}to{transform:translateX(92px)}}
.hero.d-EDU .edu-loop1{animation:edu-run1 3.4s linear infinite;}
.hero.d-EDU .edu-loop2{animation:edu-run2 4.6s linear infinite;}
.hero.d-EDU .edu-row2{animation-duration:3.0s;}
.hero.d-EDU .edu-row3{animation-duration:5.2s;}
/* --- hero: ENG — gear rack meshing with a pinion, rolling without slipping; stations ring the pinion's own circumference --- */
.hero.d-ENG .eng-teeth{fill:none;stroke:var(--k3);stroke-width:2.8;stroke-linejoin:round;opacity:.85;}
.hero.d-ENG .eng-hub{fill:none;stroke:var(--k4);stroke-width:2.8;}
.hero.d-ENG .eng-cogs line{stroke:var(--k4);stroke-width:2.6;}
.hero.d-ENG .eng-spoke{stroke:var(--wire);stroke-width:1.8;opacity:.8;}
.hero.d-ENG .eng-axle{fill:var(--ac);}
.hero.d-ENG .eng-track{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-ENG .eng-glow circle{fill:var(--k4);opacity:.14;}
@keyframes eng-roll{from{transform:translateX(0)}to{transform:translateX(-264.0px)}}
@keyframes eng-turn{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@keyframes eng-pulse{0%{opacity:.08;transform:scale(0.92)}50%{opacity:.26;transform:scale(1.06)}100%{opacity:.08;transform:scale(0.92)}}
.hero.d-ENG .eng-rack{animation:eng-roll 7s linear infinite;}
.hero.d-ENG .eng-pinion{animation:eng-turn 7s linear infinite;}
.hero.d-ENG .eng-glow{animation:eng-pulse 3.5s linear infinite;}
/* --- hero: ENV — contoured planting rows scaling outward from a vanishing point; stations step up one furrow toward the horizon --- */
.hero.d-ENV .env-fan line{stroke:var(--rule-d);stroke-width:1;opacity:.5;}
.hero.d-ENV .env-track{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-ENV .env-row{fill:none;stroke:var(--k7);stroke-width:3;stroke-linecap:round;
  transform:scale(0.04);opacity:0;animation:env-advance 7s linear infinite;}
@keyframes env-advance{
  0%{transform:scale(0.04);opacity:0;}
  6%{opacity:.85;}
  88%{opacity:.85;}
  100%{transform:scale(1.02);opacity:0;}
}
.hero.d-ENV .env-row-0{animation-delay:-0.00s;}
.hero.d-ENV .env-row-1{animation-delay:-1.17s;}
.hero.d-ENV .env-row-2{animation-delay:-2.33s;}
.hero.d-ENV .env-row-3{animation-delay:-3.50s;}
.hero.d-ENV .env-row-4{animation-delay:-4.67s;}
.hero.d-ENV .env-row-5{animation-delay:-5.83s;}
/* --- hero: FAM — a chain of interlocking rings; the chain drifts sideways while every ring turns slowly --- */
.hero.d-FAM .fam-track{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-FAM .fam-ring{fill:none;stroke:inherit;stroke-width:5;}
.hero.d-FAM .fam-rivet{fill:var(--ac);}
.hero.d-FAM .fam-slink{fill:none;stroke:var(--wire);stroke-width:2.2;opacity:.4;}
@keyframes fam-slide{from{transform:translateX(0)}to{transform:translateX(-92px)}}
@keyframes fam-slide-r{from{transform:translateX(0)}to{transform:translateX(92px)}}
.hero.d-FAM .fam-drift{animation:fam-slide 9s linear infinite;}
.hero.d-FAM .fam-drift2{animation:fam-slide-r 12s linear infinite;}
@keyframes fam-turn{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
.hero.d-FAM .h-node{animation:fam-turn 22s linear infinite;}
.hero.d-FAM .h-node[id="ha-stn-a"]{transform-origin:116.0px 68.0px;}
.hero.d-FAM .h-node[id="ha-stn-b"]{transform-origin:254.3px 68.0px;}
.hero.d-FAM .h-node[id="ha-stn-c"]{transform-origin:392.6px 68.0px;}
.hero.d-FAM .h-node[id="ha-stn-d"]{transform-origin:530.9px 68.0px;}
.hero.d-FAM .h-node[id="ha-stn-e"]{transform-origin:669.1px 68.0px;}
.hero.d-FAM .h-node[id="ha-stn-f"]{transform-origin:807.4px 68.0px;}
.hero.d-FAM .h-node[id="ha-stn-g"]{transform-origin:945.7px 68.0px;}
.hero.d-FAM .h-node[id="ha-stn-h"]{transform-origin:1084.0px 68.0px;}
/* --- hero: GEO — topographic contours drift sideways beneath a zigzag traverse that climbs the slope, crossing successive contours --- */
.hero.d-GEO .geo-track{stroke:var(--fr);stroke-width:3;fill:none;}
.hero.d-GEO .geo-line{fill:none;stroke:var(--k1);stroke-width:1.8;opacity:.45;}
.hero.d-GEO .geo-drift2 .geo-line{stroke:var(--k3);opacity:.35;}
.hero.d-GEO .geo-tri{fill:none;stroke-width:2.6;}
.hero.d-GEO .geo-dot{fill:currentColor;}
.hero.d-GEO .h-node{color:var(--ac);}
.hero.d-GEO .h-node .geo-tri{stroke:currentColor;}
@keyframes geo-drift1{from{transform:translateX(0)}to{transform:translateX(-300px)}}
@keyframes geo-drift2{from{transform:translateX(0)}to{transform:translateX(300px)}}
.hero.d-GEO .geo-drift1{animation:geo-drift1 16s linear infinite;}
.hero.d-GEO .geo-drift2{animation:geo-drift2 22s linear infinite;}
/* --- hero: GOV — stepped-pediment colonnade -- capitals tier up to the centre -- on a tally rule; two dimmer colonnades parallax behind, a fine wash drifts continuously throughout --- */
.hero.d-GOV .gov-far-shaft,.hero.d-GOV .gov-far-cap{fill:var(--wire);opacity:.14;}
.hero.d-GOV .gov-far-flute{stroke:var(--bg);stroke-width:.8;opacity:.4;}
.hero.d-GOV .gov-mid-shaft,.hero.d-GOV .gov-mid-cap{fill:var(--wire);opacity:.22;}
.hero.d-GOV .gov-mid-flute{stroke:var(--bg);stroke-width:.9;opacity:.45;}
.hero.d-GOV .gov-col-shaft,.hero.d-GOV .gov-col-cap{fill:var(--fr);}
.hero.d-GOV .gov-col-flute{stroke:var(--card);stroke-width:1.1;opacity:.7;}
.hero.d-GOV .gov-rule{stroke:var(--rule-d);stroke-width:2;fill:none;}
.hero.d-GOV .gov-pediment{stroke:var(--ac);stroke-width:2.6;}
.hero.d-GOV .gov-wash line{stroke:var(--ac);stroke-width:1.3;opacity:.2;}
@keyframes gov-far-scroll{from{transform:translateX(0)}to{transform:translateX(-90.343px)}}
@keyframes gov-mid-scroll{from{transform:translateX(0)}to{transform:translateX(-120.943px)}}
@keyframes gov-wash-drift{from{transform:translateX(0)}to{transform:translateX(-9.000px)}}
.hero.d-GOV .gov-far{animation:gov-far-scroll 22s linear infinite;}
.hero.d-GOV .gov-mid{animation:gov-mid-scroll 13s linear infinite;}
.hero.d-GOV .gov-wash{animation:gov-wash-drift 1.4s linear infinite;}
@keyframes gov-lamp{0%{opacity:.30}50%{opacity:.85}100%{opacity:.30}}
.hero.d-GOV .gov-glow{animation:gov-lamp 4.6s linear infinite;fill:var(--ac);}
/* --- hero: HIS — stratigraphic trench with eight finds at strictly increasing depth on a stepped dig-log stair; strata hatching scrolls horizontally --- */
.hero.d-HIS .his-k8{fill:var(--k8f);} .hero.d-HIS .his-k5{fill:var(--k5f);}
.hero.d-HIS .his-k2{fill:var(--k2f);} .hero.d-HIS .his-k7{fill:var(--k7f);}
.hero.d-HIS .his-k1{fill:var(--k1f);}
.hero.d-HIS .his-band{stroke:var(--rule-d);stroke-width:1;}
.hero.d-HIS .his-hatchwrap{overflow:hidden;}
.hero.d-HIS .hk-k8{stroke:var(--k8);} .hero.d-HIS .hk-k5{stroke:var(--k5);}
.hero.d-HIS .hk-k2{stroke:var(--k2);} .hero.d-HIS .hk-k7{stroke:var(--k7);}
.hero.d-HIS .hk-k1{stroke:var(--k1);}
.hero.d-HIS .his-hatch{stroke-width:1.4;opacity:.32;}
.hero.d-HIS .his-trail{stroke:var(--ac);stroke-width:2.4;}
@keyframes his-hatch-0{from{transform:translateX(0)}to{transform:translateX(-18px)}}
@keyframes his-hatch-1{from{transform:translateX(0)}to{transform:translateX(-21px)}}
@keyframes his-hatch-2{from{transform:translateX(0)}to{transform:translateX(-24px)}}
@keyframes his-hatch-3{from{transform:translateX(0)}to{transform:translateX(-27px)}}
@keyframes his-hatch-4{from{transform:translateX(0)}to{transform:translateX(-30px)}}
.hero.d-HIS .hw-0 .his-hatchgroup{animation:his-hatch-0 3.6s linear infinite;}
.hero.d-HIS .hw-1 .his-hatchgroup{animation:his-hatch-1 4.2s linear infinite;}
.hero.d-HIS .hw-2 .his-hatchgroup{animation:his-hatch-2 4.8s linear infinite;}
.hero.d-HIS .hw-3 .his-hatchgroup{animation:his-hatch-3 5.4s linear infinite;}
.hero.d-HIS .hw-4 .his-hatchgroup{animation:his-hatch-4 6.0s linear infinite;}
@keyframes his-lamp{0%,100%{opacity:.30}50%{opacity:.85}}
.hero.d-HIS .his-glow{animation:his-lamp 4.2s ease-in-out infinite;fill:var(--ac);}
/* --- hero: HOM — warp-and-weft weave with eight stations at intersections; weft rows travel through the warp via a looping dash phase --- */
.hero.d-HOM .hom-warp{stroke:var(--wire);stroke-width:1.6;opacity:.4;}
.hero.d-HOM .hom-selvage{stroke:var(--fr);stroke-width:3;}
/* Every weft row animates its dash phase across the full width, so the moving
   area here is larger than in any other hero. At full weight and saturation
   that measured 34 -- four times the next loudest -- and read as noise under
   the article title. The weave is thinned and softened rather than slowed:
   amplitude and opacity set the peak, while the period sets how continuously
   it reads, so this calms it without letting the motion go still. */
.hero.d-HOM .hom-weft{stroke-width:3;fill:none;opacity:.42;}
.hero.d-HOM .hom-weft-0{stroke:var(--k2);} .hero.d-HOM .hom-weft-1{stroke:var(--k5);}
.hero.d-HOM .hom-weft-2{stroke:var(--k4);} .hero.d-HOM .hom-weft-3{stroke:var(--k7);}
.hero.d-HOM .hom-thread{stroke:var(--ac);stroke-width:2.4;}
@keyframes hom-lamp{0%,100%{opacity:.30}50%{opacity:.85}}
.hero.d-HOM .hom-glow{animation:hom-lamp 4.0s ease-in-out infinite;fill:var(--ac);}
@keyframes hom-weave-0{from{stroke-dashoffset:0.0}to{stroke-dashoffset:-44.0}}.hero.d-HOM .hom-row-0{animation:hom-weave-0 3.0s linear infinite;}@keyframes hom-weave-1{from{stroke-dashoffset:22.0}to{stroke-dashoffset:-22.0}}.hero.d-HOM .hom-row-1{animation:hom-weave-1 3.9s linear infinite;}@keyframes hom-weave-2{from{stroke-dashoffset:0.0}to{stroke-dashoffset:-44.0}}.hero.d-HOM .hom-row-2{animation:hom-weave-2 4.8s linear infinite;}@keyframes hom-weave-3{from{stroke-dashoffset:22.0}to{stroke-dashoffset:-22.0}}.hero.d-HOM .hom-row-3{animation:hom-weave-3 5.7s linear infinite;}@keyframes hom-weave-4{from{stroke-dashoffset:0.0}to{stroke-dashoffset:-44.0}}.hero.d-HOM .hom-row-4{animation:hom-weave-4 3.0s linear infinite;}@keyframes hom-weave-5{from{stroke-dashoffset:22.0}to{stroke-dashoffset:-22.0}}.hero.d-HOM .hom-row-5{animation:hom-weave-5 3.9s linear infinite;}@keyframes hom-weave-6{from{stroke-dashoffset:0.0}to{stroke-dashoffset:-44.0}}.hero.d-HOM .hom-row-6{animation:hom-weave-6 4.8s linear infinite;}
/* --- hero: INT — chain of nine overlapping circles giving eight intersection stations; two more chains slide through behind at different rates --- */
.hero.d-INT .int-labbg{fill:var(--card);opacity:.82;}
.hero.d-INT .int-back{opacity:.16;fill:var(--wire);stroke:none;}
.hero.d-INT .int-mid{opacity:.22;stroke:var(--line2);stroke-width:1;fill:var(--wire);}
.hero.d-INT .int-fg{fill-opacity:.16;stroke-width:2;}
.hero.d-INT .int-fg-0,.hero.d-INT .int-mid-0{fill:var(--k1f);stroke:var(--k1);}
.hero.d-INT .int-fg-1,.hero.d-INT .int-mid-1{fill:var(--k2f);stroke:var(--k2);}
.hero.d-INT .int-fg-2,.hero.d-INT .int-mid-2{fill:var(--k3f);stroke:var(--k3);}
.hero.d-INT .int-fg-3,.hero.d-INT .int-mid-3{fill:var(--k4f);stroke:var(--k4);}
.hero.d-INT .int-fg-4,.hero.d-INT .int-mid-4{fill:var(--k5f);stroke:var(--k5);}
.hero.d-INT .int-fg-5,.hero.d-INT .int-mid-5{fill:var(--k6f);stroke:var(--k6);}
.hero.d-INT .int-fg-6,.hero.d-INT .int-mid-6{fill:var(--k7f);stroke:var(--k7);}
.hero.d-INT .int-fg-7,.hero.d-INT .int-mid-7{fill:var(--k8f);stroke:var(--k8);}
.hero.d-INT .int-line{stroke:var(--ac);stroke-width:2.4;}
@keyframes int-back-slide{from{transform:translateX(0)}to{transform:translateX(-990.0px)}}
@keyframes int-mid-slide{from{transform:translateX(0)}to{transform:translateX(990.0px)}}
.hero.d-INT .int-back-wrap{animation:int-back-slide 34s linear infinite;}
.hero.d-INT .int-mid-wrap{animation:int-mid-slide 21s linear infinite;}
@keyframes int-lamp{0%,100%{opacity:.30}50%{opacity:.85}}
.hero.d-INT .int-glow{animation:int-lamp 5.0s ease-in-out infinite;fill:var(--ac);}
/* --- hero: LAN — speech waveform scrolling beneath a fixed syllable envelope; stations at the eight stress peaks --- */
.hero.d-LAN .lan-bar{fill:var(--wire);opacity:.5;}
.hero.d-LAN .lan-wave-front .lan-bar{fill:var(--ac);opacity:.24;}
.hero.d-LAN .lan-env{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-LAN .h-open{stroke:var(--ac);stroke-width:3;fill:none;}
@keyframes lan-scroll{from{transform:translateX(0)}to{transform:translateX(-100px)}}
@keyframes lan-scroll-front{from{transform:translateX(-50px)}to{transform:translateX(-150px)}}
.hero.d-LAN .lan-wave-back{animation:lan-scroll 2.6s linear infinite;}
.hero.d-LAN .lan-wave-front{animation:lan-scroll-front 1.7s linear infinite;}
/* --- hero: MAT — graph-paper grid scrolling beneath a fixed plotted curve; stations at the eight plotted points, with residual ticks to a trend line --- */
.hero.d-MAT .mat-band{fill:var(--wire);opacity:.115;}
.hero.d-MAT .mat-vline{stroke:var(--line2);stroke-width:1.1;opacity:.7;}
.hero.d-MAT .mat-vline-major{stroke:var(--wire);stroke-width:1.8;opacity:.9;}
.hero.d-MAT .mat-hline{stroke:var(--line2);stroke-width:1;opacity:.4;}
.hero.d-MAT .mat-trend{stroke:var(--wire);stroke-width:1.4;stroke-dasharray:2 5;opacity:.65;}
.hero.d-MAT .mat-tick{stroke:var(--k6);stroke-width:1.6;opacity:.7;}
.hero.d-MAT .mat-curve{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-MAT .h-open{stroke:var(--ac);stroke-width:3;fill:none;}
@keyframes mat-scroll{from{transform:translateX(0)}to{transform:translateX(-40px)}}
.hero.d-MAT .mat-grid{animation:mat-scroll 3.2s linear infinite;}
@keyframes mat-band-scroll{from{transform:translateX(0)}to{transform:translateX(-80px)}}
.hero.d-MAT .mat-bandscroll{animation:mat-band-scroll 6.4s linear infinite;}
/* --- hero: MED — ECG trace with a tall, dominant spike at each of eight beat-peaks as stations, over a clinical grid; grid, echo trace and a monitor-sweep glow scroll continuously --- */
.hero.d-MED .med-gridline{stroke:var(--line);stroke-width:1;opacity:.45;}
.hero.d-MED .med-gridline-h{opacity:.28;}
.hero.d-MED .med-base{stroke:var(--line2);stroke-width:1;opacity:.6;}
.hero.d-MED .med-echo{stroke:var(--k6);stroke-width:1.8;opacity:.4;}
.hero.d-MED .med-trace{stroke:var(--ac);stroke-width:3;}
.hero.d-MED .med-sweep-s0{stop-color:var(--ac);stop-opacity:0;}
.hero.d-MED .med-sweep-s1{stop-color:var(--ac);stop-opacity:.4;}
.hero.d-MED .med-sweep-s2{stop-color:var(--ac);stop-opacity:0;}
.hero.d-MED .med-sweep{mix-blend-mode:screen;}
:root[data-theme="light"] .hero.d-MED .med-sweep{mix-blend-mode:multiply;}
@keyframes med-grid-scroll{from{transform:translateX(0)}to{transform:translateX(-24.000px)}}
@keyframes med-echo-scroll{from{transform:translateX(0)}to{transform:translateX(-145.000px)}}
@keyframes med-sweep-move{from{transform:translateX(0)}to{transform:translateX(1328px)}}
.hero.d-MED .med-grid{animation:med-grid-scroll 2.4s linear infinite;}
.hero.d-MED .med-echo-wrap{animation:med-echo-scroll 7s linear infinite;}
.hero.d-MED .med-sweep-wrap{animation:med-sweep-move 3.6s linear infinite;}
@keyframes med-lamp{0%,100%{opacity:.30}50%{opacity:.85}}
.hero.d-MED .med-glow{animation:med-lamp 1.1s ease-in-out infinite;fill:var(--ac);}
/* --- hero: MIL — range rings expanding continuously from a left-hand origin; contacts scattered across a fan of varying bearing and range, not a line --- */
.hero.d-MIL .mil-tick{stroke:var(--wire);stroke-width:1.2;opacity:.5;}
.hero.d-MIL .mil-spoke{stroke:var(--wire);stroke-width:1;opacity:.4;}
.hero.d-MIL .mil-line{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-MIL .h-open{stroke:var(--ac);stroke-width:3;fill:none;}
.hero.d-MIL .mil-ring{fill:none;stroke:var(--k6);stroke-width:2;
  transform-box:fill-box;transform-origin:50% 50%;}
@keyframes mil-expand{
  0%{transform:scale(0.2);opacity:.7;}
  100%{transform:scale(11);opacity:0;}
}
.hero.d-MIL .mil-ring{animation:mil-expand 5.6s linear infinite;}
/* --- hero: MIN — saccade scanpath over a soft attention field that drifts and re-weights continuously; stations at the eight fixation points --- */
.hero.d-MIN .min-blob{opacity:.26;}
.hero.d-MIN .min-t-k1{fill:var(--k1);}
.hero.d-MIN .min-t-k3{fill:var(--k3);}
.hero.d-MIN .min-t-k4{fill:var(--k4);}
.hero.d-MIN .min-t-k5{fill:var(--k5);}
.hero.d-MIN .min-t-k6{fill:var(--k6);}
.hero.d-MIN .min-t-k7{fill:var(--k7);}

.hero.d-MIN .min-path{stroke:var(--ac);stroke-width:2.4;fill:none;stroke-linejoin:round;}
.hero.d-MIN .h-open{stroke:var(--ac);stroke-width:3;fill:none;}
@keyframes min-drift-0{0%{transform:translate(0,0)}27%{transform:translate(46.0px,4.4px)}55%{transform:translate(16.1px,11.0px)}78%{transform:translate(-11.5px,6.1px)}100%{transform:translate(0,0)}}@keyframes min-drift-1{0%{transform:translate(0,0)}27%{transform:translate(-38.0px,-4.8px)}55%{transform:translate(-13.3px,-12.0px)}78%{transform:translate(9.5px,-6.6px)}100%{transform:translate(0,0)}}@keyframes min-drift-2{0%{transform:translate(0,0)}27%{transform:translate(34.0px,5.2px)}55%{transform:translate(11.9px,13.0px)}78%{transform:translate(-8.5px,7.2px)}100%{transform:translate(0,0)}}@keyframes min-drift-3{0%{transform:translate(0,0)}27%{transform:translate(-42.0px,-3.6px)}55%{transform:translate(-14.7px,-9.0px)}78%{transform:translate(10.5px,-5.0px)}100%{transform:translate(0,0)}}@keyframes min-drift-4{0%{transform:translate(0,0)}27%{transform:translate(28.0px,4.8px)}55%{transform:translate(9.8px,12.0px)}78%{transform:translate(-7.0px,6.6px)}100%{transform:translate(0,0)}}@keyframes min-drift-5{0%{transform:translate(0,0)}27%{transform:translate(-24.0px,-4.4px)}55%{transform:translate(-8.4px,-11.0px)}78%{transform:translate(6.0px,-6.1px)}100%{transform:translate(0,0)}}
.hero.d-MIN .min-blob-0{animation:min-drift-0 3.1s linear infinite;animation-delay:-0.0s;}
.hero.d-MIN .min-blob-1{animation:min-drift-1 3.9s linear infinite;animation-delay:-1.7s;}
.hero.d-MIN .min-blob-2{animation:min-drift-2 2.6s linear infinite;animation-delay:-3.4s;}
.hero.d-MIN .min-blob-3{animation:min-drift-3 3.6s linear infinite;animation-delay:-5.1s;}
.hero.d-MIN .min-blob-4{animation:min-drift-4 2.9s linear infinite;animation-delay:-6.8s;}
.hero.d-MIN .min-blob-5{animation:min-drift-5 2.3s linear infinite;animation-delay:-8.5s;}
/* --- hero: PHI — steelyard beam with graduated notches; the counterweight travels the length of the beam continuously while a lamp-sweep washes over it --- */
.hero.d-PHI .phi-stop-edge{stop-color:var(--ac);stop-opacity:0;}
.hero.d-PHI .phi-stop-mid{stop-color:var(--ac);stop-opacity:.24;}
.hero.d-PHI .phi-sweep{fill:url(#phi-lamp);}
.hero.d-PHI .phi-hang{stroke:var(--wire);stroke-width:1.6;}
.hero.d-PHI .phi-pan{fill:var(--k2f);stroke:var(--k2);stroke-width:2;}
.hero.d-PHI .phi-fulcrum{fill:var(--fr);}
.hero.d-PHI .phi-notch{stroke:var(--wire);stroke-width:1.4;opacity:.6;}
.hero.d-PHI .phi-beam{stroke:var(--ac);stroke-width:4;stroke-linecap:round;}
.hero.d-PHI .phi-shortarm{stroke:var(--ac);stroke-width:4;fill:none;opacity:.55;}
.hero.d-PHI .h-open{stroke:var(--ac);stroke-width:3;fill:none;}
.hero.d-PHI .phi-weight{fill:var(--k6);stroke:var(--k6);stroke-width:2;}
@keyframes phi-sweep-run{from{transform:translateX(-300px)}to{transform:translateX(1200px)}}
@keyframes phi-weight-run{from{offset-distance:0%}to{offset-distance:100%}}
.hero.d-PHI .phi-sweepg{animation:phi-sweep-run 7s linear infinite;}
.hero.d-PHI .phi-weight{offset-rotate:0deg;animation:phi-weight-run 6.4s linear infinite;}
/* --- hero: PHY — two-source interference field with fringe rays; the two wave trains travelling continuously --- */
.hero.d-PHY .phy-ray{stroke:var(--wire);stroke-width:1;stroke-dasharray:2 5;opacity:.32;fill:none;}
.hero.d-PHY .phy-track{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-PHY .phy-src{stroke:var(--k1);fill:var(--k1f);stroke-width:2.5;}
.hero.d-PHY .phy-wave1{fill:none;stroke:var(--k1);stroke-width:2;opacity:.55;}
.hero.d-PHY .phy-wave2{fill:none;stroke:var(--k3);stroke-width:2;opacity:.5;}
@keyframes phy-glow{0%,100%{opacity:.22}50%{opacity:.5}}
.hero.d-PHY .phy-glow{animation:phy-glow 2.6s linear infinite;}
@keyframes phy-run1{from{transform:translateX(0)}to{transform:translateX(-64px)}}
@keyframes phy-run2{from{transform:translateX(0)}to{transform:translateX(-64px)}}
.hero.d-PHY .phy-wavewrap1{animation:phy-run1 2.6s linear infinite;}
.hero.d-PHY .phy-wavewrap2{animation:phy-run2 3.1s linear infinite;}
/* --- hero: SPT — running-track lanes with split markers, a pace marker running the straight --- */
.hero.d-SPT .spt-lane{stroke:var(--wire);stroke-width:3;stroke-dasharray:16 10;opacity:.66;}
.hero.d-SPT .spt-tick{stroke:var(--line2);stroke-width:1.3;}
.hero.d-SPT .spt-lead{stroke:var(--line2);stroke-width:1.3;stroke-dasharray:2 3;}
.hero.d-SPT .spt-strip{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-SPT .spt-pace{fill:var(--k6);offset-rotate:0deg;}
.hero.d-SPT .spt-pace-tail{fill:var(--k6);opacity:.32;offset-rotate:0deg;}
.hero.d-SPT .spt-pace-tail2{opacity:.18;}
@keyframes spt-glow{0%,100%{opacity:.24}50%{opacity:.52}}
.hero.d-SPT .spt-glow{animation:spt-glow 2.2s linear infinite;}
@keyframes spt-flow{from{stroke-dashoffset:0}to{stroke-dashoffset:-52}}
@keyframes spt-run{from{offset-distance:0%}to{offset-distance:100%}}
.hero.d-SPT .spt-lanewrap .spt-lane{animation:spt-flow 1.9s linear infinite;}
.hero.d-SPT .spt-pace{animation:spt-run 4.4s linear infinite;}
.hero.d-SPT .spt-pace-tail{animation:spt-run 4.4s linear infinite;animation-delay:0.18s;}
.hero.d-SPT .spt-pace-tail2{animation-delay:0.36s;}
/* --- hero: TRV — split-flap departure tiles over a route arc, the flaps cycling continuously --- */
.hero.d-TRV .trv-tile{fill:var(--panel2);stroke:var(--wire);stroke-width:1.4;}
.hero.d-TRV .trv-crease{stroke:var(--card);stroke-width:1.4;opacity:.85;}
.hero.d-TRV .trv-flapwrap{transform:scaleY(1);}
.hero.d-TRV .trv-flap{font:700 17px/1 var(--mono);fill:var(--ac);}
.hero.d-TRV .trv-leaf{fill:var(--ac);stroke:var(--fr);stroke-width:1;opacity:.92;transform:scaleY(0);}
.hero.d-TRV .trv-leader{stroke:var(--line2);stroke-width:1.3;stroke-dasharray:2 3;}
.hero.d-TRV .trv-wp{fill:var(--k5f);stroke:var(--k5);stroke-width:2;}
.hero.d-TRV .trv-arc{stroke:var(--ac);stroke-width:2.6;fill:none;}
@keyframes trv-glow{0%,100%{opacity:.24}50%{opacity:.5}}
.hero.d-TRV .trv-glow{animation:trv-glow 2.4s linear infinite;}
@keyframes trv-leaf{0%{transform:scaleY(0)}3%{transform:scaleY(.6)}7%{transform:scaleY(1.1)}11%{transform:scaleY(1)}15%{transform:scaleY(.5)}19%{transform:scaleY(0)}100%{transform:scaleY(0)}}
@keyframes trv-flap0{0.00%{opacity:1.000;transform:scaleY(1.000)}6.25%{opacity:0.962;transform:scaleY(0.940)}12.50%{opacity:0.854;transform:scaleY(0.776)}18.75%{opacity:0.691;transform:scaleY(0.554)}25.00%{opacity:0.500;transform:scaleY(0.330)}31.25%{opacity:0.309;transform:scaleY(0.152)}37.50%{opacity:0.146;transform:scaleY(0.046)}43.75%{opacity:0.038;transform:scaleY(0.030)}50.00%{opacity:0.000;transform:scaleY(0.030)}56.25%{opacity:0.038;transform:scaleY(0.030)}62.50%{opacity:0.146;transform:scaleY(0.046)}68.75%{opacity:0.309;transform:scaleY(0.152)}75.00%{opacity:0.500;transform:scaleY(0.330)}81.25%{opacity:0.691;transform:scaleY(0.554)}87.50%{opacity:0.854;transform:scaleY(0.776)}93.75%{opacity:0.962;transform:scaleY(0.940)}100.00%{opacity:1.000;transform:scaleY(1.000)}}@keyframes trv-flap1{0.00%{opacity:0.750;transform:scaleY(0.631)}6.25%{opacity:0.565;transform:scaleY(0.401)}12.50%{opacity:0.371;transform:scaleY(0.204)}18.75%{opacity:0.196;transform:scaleY(0.073)}25.00%{opacity:0.067;transform:scaleY(0.030)}31.25%{opacity:0.004;transform:scaleY(0.030)}37.50%{opacity:0.017;transform:scaleY(0.030)}43.75%{opacity:0.103;transform:scaleY(0.030)}50.00%{opacity:0.250;transform:scaleY(0.109)}56.25%{opacity:0.435;transform:scaleY(0.264)}62.50%{opacity:0.629;transform:scaleY(0.477)}68.75%{opacity:0.804;transform:scaleY(0.706)}75.00%{opacity:0.933;transform:scaleY(0.895)}81.25%{opacity:0.996;transform:scaleY(0.993)}87.50%{opacity:0.983;transform:scaleY(0.973)}93.75%{opacity:0.897;transform:scaleY(0.840)}100.00%{opacity:0.750;transform:scaleY(0.631)}}@keyframes trv-flap2{0.00%{opacity:0.250;transform:scaleY(0.109)}6.25%{opacity:0.103;transform:scaleY(0.030)}12.50%{opacity:0.017;transform:scaleY(0.030)}18.75%{opacity:0.004;transform:scaleY(0.030)}25.00%{opacity:0.067;transform:scaleY(0.030)}31.25%{opacity:0.196;transform:scaleY(0.073)}37.50%{opacity:0.371;transform:scaleY(0.204)}43.75%{opacity:0.565;transform:scaleY(0.401)}50.00%{opacity:0.750;transform:scaleY(0.631)}56.25%{opacity:0.897;transform:scaleY(0.840)}62.50%{opacity:0.983;transform:scaleY(0.973)}68.75%{opacity:0.996;transform:scaleY(0.993)}75.00%{opacity:0.933;transform:scaleY(0.895)}81.25%{opacity:0.804;transform:scaleY(0.706)}87.50%{opacity:0.629;transform:scaleY(0.477)}93.75%{opacity:0.435;transform:scaleY(0.264)}100.00%{opacity:0.250;transform:scaleY(0.109)}}@keyframes trv-flap3{0.00%{opacity:0.000;transform:scaleY(0.030)}6.25%{opacity:0.038;transform:scaleY(0.030)}12.50%{opacity:0.146;transform:scaleY(0.046)}18.75%{opacity:0.309;transform:scaleY(0.152)}25.00%{opacity:0.500;transform:scaleY(0.330)}31.25%{opacity:0.691;transform:scaleY(0.554)}37.50%{opacity:0.854;transform:scaleY(0.776)}43.75%{opacity:0.962;transform:scaleY(0.940)}50.00%{opacity:1.000;transform:scaleY(1.000)}56.25%{opacity:0.962;transform:scaleY(0.940)}62.50%{opacity:0.854;transform:scaleY(0.776)}68.75%{opacity:0.691;transform:scaleY(0.554)}75.00%{opacity:0.500;transform:scaleY(0.330)}81.25%{opacity:0.309;transform:scaleY(0.152)}87.50%{opacity:0.146;transform:scaleY(0.046)}93.75%{opacity:0.038;transform:scaleY(0.030)}100.00%{opacity:0.000;transform:scaleY(0.030)}}@keyframes trv-flap4{0.00%{opacity:0.250;transform:scaleY(0.109)}6.25%{opacity:0.435;transform:scaleY(0.264)}12.50%{opacity:0.629;transform:scaleY(0.477)}18.75%{opacity:0.804;transform:scaleY(0.706)}25.00%{opacity:0.933;transform:scaleY(0.895)}31.25%{opacity:0.996;transform:scaleY(0.993)}37.50%{opacity:0.983;transform:scaleY(0.973)}43.75%{opacity:0.897;transform:scaleY(0.840)}50.00%{opacity:0.750;transform:scaleY(0.631)}56.25%{opacity:0.565;transform:scaleY(0.401)}62.50%{opacity:0.371;transform:scaleY(0.204)}68.75%{opacity:0.196;transform:scaleY(0.073)}75.00%{opacity:0.067;transform:scaleY(0.030)}81.25%{opacity:0.004;transform:scaleY(0.030)}87.50%{opacity:0.017;transform:scaleY(0.030)}93.75%{opacity:0.103;transform:scaleY(0.030)}100.00%{opacity:0.250;transform:scaleY(0.109)}}@keyframes trv-flap5{0.00%{opacity:0.750;transform:scaleY(0.631)}6.25%{opacity:0.897;transform:scaleY(0.840)}12.50%{opacity:0.983;transform:scaleY(0.973)}18.75%{opacity:0.996;transform:scaleY(0.993)}25.00%{opacity:0.933;transform:scaleY(0.895)}31.25%{opacity:0.804;transform:scaleY(0.706)}37.50%{opacity:0.629;transform:scaleY(0.477)}43.75%{opacity:0.435;transform:scaleY(0.264)}50.00%{opacity:0.250;transform:scaleY(0.109)}56.25%{opacity:0.103;transform:scaleY(0.030)}62.50%{opacity:0.017;transform:scaleY(0.030)}68.75%{opacity:0.004;transform:scaleY(0.030)}75.00%{opacity:0.067;transform:scaleY(0.030)}81.25%{opacity:0.196;transform:scaleY(0.073)}87.50%{opacity:0.371;transform:scaleY(0.204)}93.75%{opacity:0.565;transform:scaleY(0.401)}100.00%{opacity:0.750;transform:scaleY(0.631)}}
.hero.d-TRV .trv-flap-0{animation:trv-flap0 2.6s linear infinite;}.hero.d-TRV .trv-flap-1{animation:trv-flap1 3.1s linear infinite;}.hero.d-TRV .trv-flap-2{animation:trv-flap2 2.3s linear infinite;}.hero.d-TRV .trv-flap-3{animation:trv-flap3 3.4s linear infinite;}.hero.d-TRV .trv-flap-4{animation:trv-flap4 2.8s linear infinite;}.hero.d-TRV .trv-flap-5{animation:trv-flap5 3.7s linear infinite;}
/* --- hero: WRK — a folding carpenter's rule bent at a single angled joint mid-frame, hatch shading travelling along both legs --- */
.hero.d-WRK .wrk-body{fill:var(--panel2);}
.hero.d-WRK .wrk-frame{fill:none;stroke:var(--wire);stroke-width:1.6;}
.hero.d-WRK .wrk-grad{stroke:var(--ink);stroke-width:1;opacity:.5;}
.hero.d-WRK .wrk-hatch line{stroke:var(--wire);stroke-width:2.1;opacity:.72;}
.hero.d-WRK .wrk-edge{stroke:var(--ac);stroke-width:2.6;fill:none;}
.hero.d-WRK .wrk-rivet{fill:var(--fr);stroke:var(--wire);stroke-width:1.2;}
@keyframes wrk-glow{0%{opacity:.24}50%{opacity:.6}100%{opacity:.24}}
.hero.d-WRK .wrk-glow{animation:wrk-glow 2.9s linear infinite;}
@keyframes wrk-travel-l{from{transform:translateX(0)}to{transform:translateX(-12.0px)}}
@keyframes wrk-travel-r{from{transform:translateX(0)}to{transform:translateX(-12.0px)}}
.hero.d-WRK .wrk-hw-l{animation:wrk-travel-l .9s linear infinite;}
.hero.d-WRK .wrk-hw-r{animation:wrk-travel-r .9s linear infinite;}

/* ===== figures: the editorial diagram system, scoped and re-tokened ===== */
svg.mermaid-svg{--msv-paper:var(--card);--msv-paper-deep:var(--panel2);--msv-surface:var(--card);--msv-ink:var(--ink);--msv-node-ink:var(--ink);--msv-muted:var(--mut);--msv-line:var(--wire);--msv-rule:var(--line2);--msv-rule-strong:var(--wire);--msv-grid-line:var(--line);--msv-cluster:var(--panel2);--msv-accent:var(--ac);--msv-process:var(--k1);--msv-source:var(--k3);--msv-decision:var(--k5);--msv-risk:var(--k6);--msv-outcome:var(--k7);--msv-reference:var(--k4);--msv-exception:var(--k6);--msv-feedback:var(--k3);--msv-warning:var(--k5);--msv-source-soft:var(--k3f);--msv-reference-soft:var(--k4f);--msv-outcome-soft:var(--k7f);--msv-decision-soft:var(--k5f);--msv-risk-soft:var(--k6f);--msv-cycle-0:var(--k1);--msv-cycle-1:var(--k5);--msv-cycle-2:var(--k7);--msv-cycle-3:var(--k4);--msv-cycle-4:var(--k6);--msv-cycle-5:var(--k3);--msv-cycle-6:var(--k2);--msv-cycle-7:var(--k8);--msv-shadow:rgba(0,0,0,.18);}
:root[data-theme="dark"] svg.mermaid-svg{--msv-shadow:rgba(0,0,0,.5);}
svg.mermaid-svg[data-background="transparent"]{
  --msv-paper: transparent;
}
svg.mermaid-svg.mermaid-svg{
  overflow: visible;
  color: var(--msv-ink);
  font-family: var(--msv-font);
  font-kerning: normal;
  font-synthesis: none;
  shape-rendering: geometricPrecision;
  text-rendering: geometricPrecision;
}
svg.mermaid-svg.mermaid-svg text,svg.mermaid-svg.mermaid-svg .label,svg.mermaid-svg.mermaid-svg .nodeLabel,svg.mermaid-svg.mermaid-svg .edgeLabel{
  font-family: var(--msv-font);
  -webkit-font-smoothing: antialiased;
}
svg.mermaid-svg.mermaid-svg .msv-paper{
  fill: var(--msv-paper);
}
svg.mermaid-svg.mermaid-svg .msv-grid{
  opacity: 0.42;
  pointer-events: none;
}
svg.mermaid-svg[data-background="transparent"] .msv-grid{
  opacity: 0.16;
}
svg.mermaid-svg.mermaid-svg .msv-grid-line{
  fill: none;
  stroke: var(--msv-grid-line);
  stroke-width: 0.55;
}
svg.mermaid-svg.mermaid-svg .msv-frame-rule{
  fill: none;
  stroke: var(--msv-rule);
  stroke-width: 1.5;
}
svg.mermaid-svg.mermaid-svg .msv-header-rule{
  fill: none;
  stroke: var(--msv-rule);
  stroke-width: 1;
}
svg.mermaid-svg.mermaid-svg .msv-header-accent{
  fill: none;
  stroke: var(--msv-accent);
  stroke-width: 3;
}
svg.mermaid-svg.mermaid-svg .msv-eyebrow,svg.mermaid-svg.mermaid-svg .msv-figure-code,svg.mermaid-svg.mermaid-svg .msv-footer-label{
  fill: var(--msv-muted);
  font-family: var(--msv-mono);
  font-size: 11.5px;
  font-weight: 650;
  letter-spacing: 1.35px;
}
svg.mermaid-svg.mermaid-svg .msv-visible-title{
  fill: var(--msv-ink);
  font-family: var(--msv-font);
  font-size: 20px;
  font-weight: 650;
  letter-spacing: -0.2px;
}
svg.mermaid-svg.mermaid-svg .node{
  --msv-role: var(--msv-process);
  --msv-node-ink: var(--msv-ink);
}
svg.mermaid-svg.mermaid-svg .node[data-msv-role="source"]{ --msv-role: var(--msv-source); }
svg.mermaid-svg.mermaid-svg .node[data-msv-role="decision"]{ --msv-role: var(--msv-decision); }
svg.mermaid-svg.mermaid-svg .node[data-msv-role="risk"]{ --msv-role: var(--msv-risk); }
svg.mermaid-svg.mermaid-svg .node[data-msv-role="outcome"]{ --msv-role: var(--msv-outcome); }
svg.mermaid-svg.mermaid-svg .node[data-msv-role="reference"]{ --msv-role: var(--msv-reference); }
svg.mermaid-svg.mermaid-svg .msv-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-role) !important;
  stroke-width: 1.35px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg.mermaid-svg .msv-card-rail{
  fill: var(--msv-role) !important;
  stroke: none !important;
}
svg.mermaid-svg.mermaid-svg .msv-card-tick,svg.mermaid-svg.mermaid-svg .msv-card-signal{
  fill: none !important;
  stroke: var(--msv-role) !important;
  stroke-width: 1.25px !important;
  stroke-linecap: square;
}
svg.mermaid-svg[data-msv-family="flowchart"] .node:not([data-msv-shape="process"]) .msv-card-tick{
  display: none;
}
svg.mermaid-svg[data-msv-family="flowchart"] .msv-shape-detail{
  fill: none !important;
  stroke: var(--msv-role) !important;
  stroke-width: 1.05px !important;
  stroke-linecap: square;
  opacity: 0.72;
}
svg.mermaid-svg[data-msv-family="flowchart"] .msv-shape-port{
  fill: var(--msv-role) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .msv-shape-highlight{
  fill: none !important;
  stroke: color-mix(in srgb, var(--msv-surface) 40%, white 60%) !important;
  stroke-width: 1px !important;
  stroke-linecap: round;
  opacity: 0.55;
}
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="decision"] .msv-card{ fill: var(--msv-decision-soft) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="store"] .msv-card{ fill: var(--msv-source-soft) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="data"] .msv-card{ fill: var(--msv-reference-soft) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="terminal"] .msv-card{ fill: var(--msv-outcome-soft) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="subroutine"] .msv-card{ fill: color-mix(in srgb, var(--msv-source-soft) 54%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="document"] .msv-card{ fill: color-mix(in srgb, var(--msv-reference-soft) 62%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="preparation"] .msv-card{ fill: color-mix(in srgb, var(--msv-decision-soft) 60%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="manual"] .msv-card{ fill: color-mix(in srgb, var(--msv-risk-soft) 54%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="manual-output"] .msv-card{ fill: color-mix(in srgb, var(--msv-risk-soft) 54%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="flag"] .msv-card{ fill: color-mix(in srgb, var(--msv-decision-soft) 46%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="synchronization"] .msv-card{ fill: var(--msv-process) !important; stroke: none !important; filter: none; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="junction"] .msv-card{ fill: var(--msv-paper-deep) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] [data-msv-shape="annotation"] .msv-card{ filter: none; }
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link[data-msv-path="positive"]{
  stroke: var(--msv-outcome) !important;
  stroke-width: 1.75px !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link[data-msv-path="negative"]{
  stroke: var(--msv-risk) !important;
  stroke-width: 1.75px !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="positive"] text,svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="positive"] tspan{ fill: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="negative"] text,svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="negative"] tspan{ fill: var(--msv-risk) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] .msv-marker-positive path{
  fill: var(--msv-outcome) !important;
  stroke: var(--msv-outcome) !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .msv-marker-negative path{
  fill: var(--msv-risk) !important;
  stroke: var(--msv-risk) !important;
  stroke-width: 1.2px;
}
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link[data-msv-path="warning"]{
  stroke: var(--msv-warning) !important;
  stroke-width: 1.75px !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link[data-msv-path="exception"]{
  stroke: var(--msv-exception) !important;
  stroke-width: 2px !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link[data-msv-path="feedback"]{
  stroke: var(--msv-feedback) !important;
  stroke-width: 1.6px !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="warning"] text,svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="warning"] tspan{ fill: var(--msv-warning) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="exception"] text,svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="exception"] tspan{ fill: var(--msv-exception) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="feedback"] text,svg.mermaid-svg[data-msv-family="flowchart"] .edgeLabel[data-msv-path="feedback"] tspan{ fill: var(--msv-feedback) !important; }
svg.mermaid-svg[data-msv-family="flowchart"] .msv-marker-warning path{
  fill: none !important;
  stroke: var(--msv-warning) !important;
  stroke-width: 1.6px;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="flowchart"] .msv-marker-exception path{
  fill: var(--msv-exception) !important;
  stroke: var(--msv-exception) !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .msv-marker-exception circle{
  fill: var(--msv-exception) !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .msv-marker-feedback path{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-feedback) !important;
  stroke-width: 1.3px;
  stroke-linejoin: round;
}
svg.mermaid-svg.mermaid-svg .node .label,svg.mermaid-svg.mermaid-svg .node .nodeLabel,svg.mermaid-svg.mermaid-svg .node text,svg.mermaid-svg.mermaid-svg .node tspan{
  color: var(--msv-node-ink) !important;
  fill: var(--msv-node-ink) !important;
  font-size: 15px;
  font-weight: 560;
}
svg.mermaid-svg.mermaid-svg .cluster .msv-cluster-plate{
  fill: var(--msv-cluster) !important;
  fill-opacity: 0.68 !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
  stroke-dasharray: 4 4;
}
svg.mermaid-svg.mermaid-svg .cluster-label text,svg.mermaid-svg.mermaid-svg .cluster-label span{
  color: var(--msv-muted) !important;
  fill: var(--msv-muted) !important;
  font-family: var(--msv-mono);
  font-size: 14.5px;
  font-weight: 700;
  letter-spacing: 0.65px;
  text-transform: uppercase;
}
svg.mermaid-svg.mermaid-svg .edgePath path,svg.mermaid-svg.mermaid-svg .flowchart-link,svg.mermaid-svg.mermaid-svg .relationshipLine,svg.mermaid-svg.mermaid-svg .messageLine0,svg.mermaid-svg.mermaid-svg .messageLine1{
  fill: none;
  stroke: var(--msv-line) !important;
  stroke-width: 1.25px !important;
  stroke-linecap: square;
  stroke-linejoin: miter;
}
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link.edge-thickness-thick[data-msv-path="neutral"]{
  stroke-width: 2.8px !important;
}
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link.edge-pattern-dotted[data-msv-path="neutral"]{
  stroke-dasharray: 1.5 4 !important;
  stroke-linecap: round;
}
svg.mermaid-svg[data-msv-family="flowchart"] .flowchart-link.edge-pattern-dashed[data-msv-path="neutral"]{
  stroke-dasharray: 8 5 !important;
}
svg.mermaid-svg.mermaid-svg marker path,svg.mermaid-svg.mermaid-svg marker circle{
  fill: var(--msv-line) !important;
  stroke: var(--msv-line) !important;
}
svg.mermaid-svg.mermaid-svg .edgeLabel rect,svg.mermaid-svg.mermaid-svg .edgeLabel .background,svg.mermaid-svg.mermaid-svg .labelBkg{
  fill: var(--msv-paper-deep) !important;
  opacity: 0.98 !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 0.65px !important;
  rx: 1px;
  ry: 1px;
}
svg.mermaid-svg.mermaid-svg .edgeLabel text,svg.mermaid-svg.mermaid-svg .edgeLabel tspan,svg.mermaid-svg.mermaid-svg .edgeLabel span{
  color: var(--msv-muted) !important;
  fill: var(--msv-muted) !important;
  font-family: var(--msv-mono);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.35px;
  text-transform: uppercase;
}
svg.mermaid-svg.mermaid-svg:not([data-msv-family="flowchart"]) rect,svg.mermaid-svg.mermaid-svg:not([data-msv-family="flowchart"]) polygon{
  stroke: var(--msv-rule) !important;
  stroke-width: 1.15px !important;
}
svg.mermaid-svg.mermaid-svg:not([data-msv-family="flowchart"]) text,svg.mermaid-svg.mermaid-svg:not([data-msv-family="flowchart"]) tspan{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-font);
}
svg.mermaid-svg[data-msv-presentation="mermaid"]{
  background: var(--msv-paper) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"] text,svg.mermaid-svg[data-msv-presentation="mermaid"] tspan,svg.mermaid-svg[data-msv-presentation="mermaid"] .label,svg.mermaid-svg[data-msv-presentation="mermaid"] .nodeLabel,svg.mermaid-svg[data-msv-presentation="mermaid"] .edgeLabel{
  color: var(--msv-ink) !important;
  fill: var(--msv-ink) !important;
  font-family: var(--msv-font) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"] g.node > rect,svg.mermaid-svg[data-msv-presentation="mermaid"] g.node > polygon,svg.mermaid-svg[data-msv-presentation="mermaid"] g.node > ellipse,svg.mermaid-svg[data-msv-presentation="mermaid"] g.node > .label-container,svg.mermaid-svg[data-msv-presentation="mermaid"] .actor,svg.mermaid-svg[data-msv-presentation="mermaid"] .note,svg.mermaid-svg[data-msv-presentation="mermaid"] .labelBox{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1.35px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg[data-msv-presentation="mermaid"] g.node > polygon,svg.mermaid-svg[data-msv-presentation="mermaid"] g.node > path.label-container{
  fill: var(--msv-decision-soft) !important;
  stroke: var(--msv-decision) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"] .cluster > rect,svg.mermaid-svg[data-msv-presentation="mermaid"] .stateGroup > rect,svg.mermaid-svg[data-msv-presentation="mermaid"] .loopLine{
  fill: var(--msv-cluster) !important;
  fill-opacity: 0.72 !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"] .edgePaths path,svg.mermaid-svg[data-msv-presentation="mermaid"] .flowchart-link,svg.mermaid-svg[data-msv-presentation="mermaid"] .messageLine0,svg.mermaid-svg[data-msv-presentation="mermaid"] .messageLine1,svg.mermaid-svg[data-msv-presentation="mermaid"] .transition,svg.mermaid-svg[data-msv-presentation="mermaid"] .relation,svg.mermaid-svg[data-msv-presentation="mermaid"] .relationshipLine{
  fill: none !important;
  stroke: var(--msv-line) !important;
  stroke-width: 1.3px !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"] .edgeLabel rect,svg.mermaid-svg[data-msv-presentation="mermaid"] .labelBkg,svg.mermaid-svg[data-msv-presentation="mermaid"] .commit-label-bkg,svg.mermaid-svg[data-msv-presentation="mermaid"] .branchLabelBkg{
  fill: var(--msv-paper-deep) !important;
  stroke: var(--msv-rule) !important;
  opacity: 0.98 !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="sequence"] rect[class^="activation"]{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-source) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="sequence"] .sequenceNumber,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="sequence"] .messageText,svg.mermaid-svg[data-msv-presentation="mermaid"] .edgeLabel{
  font-family: var(--msv-mono) !important;
  font-size: 11px !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="class"] .node .outer-path path,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="er"] .node .outer-path path{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-rule-strong) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="er"] .row-rect-odd path{
  fill: var(--msv-paper-deep) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="er"] .row-rect-even path{
  fill: var(--msv-surface) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .section{
  fill: var(--msv-paper-deep) !important;
  stroke: var(--msv-rule) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .task{
  fill: var(--msv-process) !important;
  stroke: var(--msv-process) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .task.done0,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .task.done1{
  fill: var(--msv-outcome) !important;
  stroke: var(--msv-outcome) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .task.active0,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .task.active1,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .task.crit0,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="gantt"] .task.crit1{
  fill: var(--msv-decision) !important;
  stroke: var(--msv-decision) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="pie"] .pieCircle:nth-of-type(6n + 1){ fill: var(--msv-process) !important; }
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="pie"] .pieCircle:nth-of-type(6n + 2){ fill: var(--msv-decision) !important; }
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="pie"] .pieCircle:nth-of-type(6n + 3){ fill: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="pie"] .pieCircle:nth-of-type(6n + 4){ fill: var(--msv-reference) !important; }
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="pie"] .pieCircle:nth-of-type(6n + 5){ fill: var(--msv-risk) !important; }
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="pie"] .pieCircle:nth-of-type(6n){ fill: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="mindmap"] .mindmap-node path,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="mindmap"] .mindmap-node rect,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="timeline"] .timeline-node path,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="timeline"] .timeline-node rect{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-reference) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="git-graph"] .branch,svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="git-graph"] .arrow{
  stroke: var(--msv-line) !important;
}
svg.mermaid-svg[data-msv-presentation="mermaid"][data-msv-family="git-graph"] .commit{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-source) !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-participant-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1.35px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-participant-rail{
  fill: var(--msv-source) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="sequence"] text.actor{
  fill: var(--msv-ink) !important;
  font-size: 14px !important;
  font-weight: 680 !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-participant-index{
  fill: var(--msv-source) !important;
  font-family: var(--msv-mono) !important;
  font-size: 8.5px !important;
  font-weight: 750;
  letter-spacing: 0.5px;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-participant-glyph,svg.mermaid-svg[data-msv-family="sequence"] .actor-man.actor-top{
  color: var(--msv-source);
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-system-glyph-ring,svg.mermaid-svg[data-msv-family="sequence"] .msv-human-badge{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1.25px !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-system-glyph-line,svg.mermaid-svg[data-msv-family="sequence"] .msv-human-status{
  fill: none !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1.35px !important;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-human-badge-core{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-human-initials{
  fill: var(--msv-source) !important;
  font-family: var(--msv-mono) !important;
  font-size: 12px !important;
  font-weight: 800;
  letter-spacing: 0.6px;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-human-label{
  fill: var(--msv-ink) !important;
  font-size: 13px !important;
  font-weight: 720 !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-human-label tspan{
  fill: var(--msv-ink) !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .actor-line{
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1px !important;
  stroke-dasharray: 3 5 !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-lifeline-terminal{
  fill: var(--msv-paper) !important;
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .messageLine0,svg.mermaid-svg[data-msv-family="sequence"] .messageLine1{
  stroke: var(--msv-line) !important;
  stroke-width: 1.35px !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .messageText{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 11.5px !important;
  font-weight: 650;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-sequence-callout{
  fill: var(--msv-reference-soft) !important;
  stroke: var(--msv-reference) !important;
  stroke-width: 1.2px !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .noteText{
  fill: var(--msv-ink) !important;
  font-size: 12px !important;
  font-weight: 600;
}
svg.mermaid-svg[data-msv-family="sequence"] rect[class^="activation"]{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .loopLine{
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
  stroke-dasharray: 2 5;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-sequence-fragment{
  fill: color-mix(in srgb, var(--msv-cluster) 32%, transparent) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .msv-fragment-alt{ fill: color-mix(in srgb, var(--msv-decision-soft) 36%, transparent) !important; }
svg.mermaid-svg[data-msv-family="sequence"] .msv-fragment-par{ fill: color-mix(in srgb, var(--msv-source-soft) 42%, transparent) !important; }
svg.mermaid-svg[data-msv-family="sequence"] .msv-fragment-opt{ fill: color-mix(in srgb, var(--msv-reference-soft) 42%, transparent) !important; }
svg.mermaid-svg[data-msv-family="sequence"] .msv-fragment-loop{ fill: color-mix(in srgb, var(--msv-outcome-soft) 38%, transparent) !important; }
svg.mermaid-svg[data-msv-family="sequence"] .msv-fragment-rail{
  fill: var(--msv-reference) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="sequence"] [data-msv-fragment="alt"] .msv-fragment-rail{ fill: var(--msv-decision) !important; }
svg.mermaid-svg[data-msv-family="sequence"] [data-msv-fragment="par"] .msv-fragment-rail{ fill: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="sequence"] [data-msv-fragment="loop"] .msv-fragment-rail{ fill: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="sequence"] .labelBox{
  fill: var(--msv-paper-deep) !important;
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="sequence"] .loopText,svg.mermaid-svg[data-msv-family="sequence"] .labelText,svg.mermaid-svg[data-msv-family="sequence"] .sequenceNumber{
  fill: var(--msv-muted) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10px !important;
  font-weight: 720;
  letter-spacing: 0.35px;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-process) !important;
  stroke-width: 2px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-inset{
  fill: none !important;
  stroke: color-mix(in srgb, var(--msv-process) 52%, transparent) !important;
  stroke-width: 0.8px !important;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-port,svg.mermaid-svg[data-msv-family="state"] .msv-state-choice-core{
  fill: var(--msv-process) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-choice{
  fill: var(--msv-decision-soft) !important;
  stroke: var(--msv-decision) !important;
  stroke-width: 2px !important;
  filter: none;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-choice-compass{
  fill: none !important;
  stroke: var(--msv-decision) !important;
  stroke-width: 1px !important;
  opacity: 0.66;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-note{
  fill: var(--msv-reference-soft) !important;
  stroke: var(--msv-reference) !important;
  stroke-width: 1.2px !important;
}
svg.mermaid-svg[data-msv-family="state"] .statediagram-note text,svg.mermaid-svg[data-msv-family="state"] .statediagram-note tspan{
  fill: var(--msv-ink) !important;
  font-size: 11.5px !important;
  font-weight: 600;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-synchronization{
  fill: var(--msv-process) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="state"] .msv-sync-bar{
  fill: var(--msv-process) !important;
  stroke: color-mix(in srgb, var(--msv-process) 62%, var(--msv-paper-deep)) !important;
  stroke-width: 1px;
  filter: drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg[data-msv-family="state"] .msv-sync-rung{
  stroke: color-mix(in srgb, white 58%, var(--msv-process)) !important;
  stroke-width: 1.6px;
  stroke-linecap: round;
  opacity: 0.9;
}
svg.mermaid-svg[data-msv-family="state"] .msv-sync-pip{
  fill: var(--msv-accent) !important;
  stroke: var(--msv-surface) !important;
  stroke-width: 1px;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-composite{
  fill: color-mix(in srgb, var(--msv-source-soft) 28%, transparent) !important;
  stroke: var(--msv-process) !important;
  stroke-width: 2px !important;
  stroke-dasharray: 12 3 2 3;
  rx: 14px;
  ry: 14px;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-composite-inner{
  fill: color-mix(in srgb, var(--msv-surface) 80%, transparent) !important;
  stroke: color-mix(in srgb, var(--msv-process) 54%, var(--msv-rule)) !important;
  stroke-dasharray: 2 5;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-start,svg.mermaid-svg[data-msv-family="state"] .msv-state-end-core{
  fill: var(--msv-process) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-start-ring{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-process) !important;
  stroke-width: 1.5px !important;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-end-landing{
  fill: none !important;
  stroke: color-mix(in srgb, var(--msv-process) 40%, transparent) !important;
  stroke-width: 1px !important;
  stroke-dasharray: 1 3;
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-end-plate{
  fill: var(--msv-process) !important;
  stroke: var(--msv-ink) !important;
  stroke-width: 0.75px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg[data-msv-family="state"] .msv-state-end-mark{
  fill: none !important;
  stroke: var(--msv-surface) !important;
  stroke-width: 2px !important;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="state"] .msv-transition{
  fill: none !important;
  stroke: var(--msv-line) !important;
  stroke-width: 1.35px !important;
  stroke-dasharray: 7 3 1 3;
}
svg.mermaid-svg[data-msv-family="state"] .node .label,svg.mermaid-svg[data-msv-family="state"] .nodeLabel{
  color: var(--msv-ink) !important;
  fill: var(--msv-ink) !important;
  font-size: 14px !important;
  font-weight: 640 !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1.3px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-header{
  fill: var(--msv-source) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-fields{
  fill: color-mix(in srgb, var(--msv-source-soft) 38%, var(--msv-surface)) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-methods{
  fill: color-mix(in srgb, var(--msv-paper-deep) 54%, var(--msv-surface)) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-gutter,svg.mermaid-svg[data-msv-family="class"] .msv-class-header-rule{
  fill: none !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-field-dot,svg.mermaid-svg[data-msv-family="class"] .msv-class-method-dot{
  fill: var(--msv-source) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-index{
  fill: color-mix(in srgb, var(--msv-paper) 72%, transparent) !important;
  font-family: var(--msv-mono) !important;
  font-size: 9.5px !important;
  font-weight: 750;
  letter-spacing: 0.5px;
}
svg.mermaid-svg[data-msv-family="class"] .msv-record-divider{
  stroke: var(--msv-rule) !important;
  stroke-width: 0.8px !important;
}
svg.mermaid-svg[data-msv-family="class"] .label-group text,svg.mermaid-svg[data-msv-family="class"] .label-group tspan{
  fill: var(--msv-paper) !important;
  font-size: 14px !important;
  font-weight: 740 !important;
}
svg.mermaid-svg[data-msv-family="class"] .annotation-group text,svg.mermaid-svg[data-msv-family="class"] .annotation-group tspan{
  fill: color-mix(in srgb, var(--msv-paper) 82%, transparent) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10px !important;
  font-weight: 700;
  letter-spacing: 0.45px;
}
svg.mermaid-svg[data-msv-family="class"] .members-group text,svg.mermaid-svg[data-msv-family="class"] .members-group tspan,svg.mermaid-svg[data-msv-family="class"] .methods-group text,svg.mermaid-svg[data-msv-family="class"] .methods-group tspan{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 11px !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-relation{
  fill: none !important;
  stroke: var(--msv-line) !important;
  stroke-width: 1.25px !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-relation[data-msv-relation="inheritance"]{
  stroke: var(--msv-source) !important;
  stroke-width: 1.8px !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-relation[data-msv-relation="composition"]{
  stroke: var(--msv-outcome) !important;
  stroke-width: 1.65px !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-relation[data-msv-relation="aggregation"]{
  stroke: var(--msv-reference) !important;
  stroke-width: 1.5px !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-relation[data-msv-relation="dependency"]{
  stroke: var(--msv-decision) !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-relation[data-msv-relation="note"]{
  stroke: var(--msv-reference) !important;
}
svg.mermaid-svg[data-msv-family="class"] .msv-class-note{
  fill: var(--msv-reference-soft) !important;
  stroke: var(--msv-reference) !important;
  stroke-width: 1.2px !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-entity-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1.4px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(0 8px 20px color-mix(in srgb, var(--msv-shadow) 62%, transparent));
}
svg.mermaid-svg[data-msv-family="er"] .msv-entity-header{
  fill: var(--msv-source) !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-entity-rail{
  fill: var(--msv-accent) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-row-odd{
  fill: var(--msv-paper-deep) !important;
  fill: color-mix(in srgb, var(--msv-surface) 91%, var(--msv-paper-deep)) !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-row-even{ fill: var(--msv-surface) !important; }
svg.mermaid-svg[data-msv-family="er"] .msv-row-primary{
  fill: color-mix(in srgb, var(--msv-source-soft) 62%, var(--msv-surface)) !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-row-foreign{
  fill: color-mix(in srgb, var(--msv-reference-soft) 48%, var(--msv-surface)) !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-row-unique{
  fill: color-mix(in srgb, var(--msv-outcome-soft) 48%, var(--msv-surface)) !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-entity-divider{
  stroke: var(--msv-rule) !important;
  stroke-width: 0.7px !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-entity-header-rule{
  fill: none;
  stroke: color-mix(in srgb, var(--msv-paper) 68%, transparent);
  stroke-width: 1px;
}
svg.mermaid-svg[data-msv-family="er"] .msv-entity-index{
  fill: color-mix(in srgb, var(--msv-paper) 78%, transparent) !important;
  font-family: var(--msv-mono);
  font-size: 8.5px;
  font-weight: 750;
  letter-spacing: 0.08em;
}
svg.mermaid-svg[data-msv-family="er"] .label.name text,svg.mermaid-svg[data-msv-family="er"] .label.name tspan{
  fill: var(--msv-paper) !important;
  color: var(--msv-paper) !important;
  font-size: 13.5px !important;
  font-weight: 760 !important;
  letter-spacing: 0.35px;
}
svg.mermaid-svg[data-msv-family="er"] .attribute-type text,svg.mermaid-svg[data-msv-family="er"] .attribute-type tspan{
  fill: var(--msv-source) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10.5px !important;
  font-weight: 700;
}
svg.mermaid-svg[data-msv-family="er"] .attribute-keys text,svg.mermaid-svg[data-msv-family="er"] .attribute-keys tspan{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 9px !important;
  font-weight: 700;
}
svg.mermaid-svg[data-msv-family="er"] .msv-key-badge{
  fill: var(--msv-paper-deep);
  stroke: var(--msv-rule);
  stroke-width: 1px;
}
svg.mermaid-svg[data-msv-family="er"] .msv-key-primary{ fill: var(--msv-source-soft); stroke: var(--msv-source); }
svg.mermaid-svg[data-msv-family="er"] .msv-key-foreign{ fill: var(--msv-reference-soft); stroke: var(--msv-reference); }
svg.mermaid-svg[data-msv-family="er"] .msv-key-unique{ fill: var(--msv-outcome-soft); stroke: var(--msv-outcome); }
svg.mermaid-svg[data-msv-family="er"] .attribute-name text,svg.mermaid-svg[data-msv-family="er"] .attribute-name tspan,svg.mermaid-svg[data-msv-family="er"] .attribute-comment text,svg.mermaid-svg[data-msv-family="er"] .attribute-comment tspan{
  fill: var(--msv-muted) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10.5px !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-relationship{
  fill: none !important;
  stroke: var(--msv-outcome) !important;
  stroke-width: 1.7px !important;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-relationship[data-msv-relationship="associative"]{
  stroke: var(--msv-reference) !important;
  stroke-dasharray: 3 4;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-relationship[data-msv-relationship="optional"]{
  stroke: var(--msv-decision) !important;
  stroke-dasharray: 8 4;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-relationship[data-msv-relationship="required"]{
  stroke: var(--msv-source) !important;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-relationship-underlay{
  fill: none;
  stroke: var(--msv-paper);
  stroke-width: 5px;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-cardinality-shell{
  fill: var(--msv-surface);
  stroke: var(--msv-rule-strong);
  stroke-width: 1px;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-cardinality-glyph{
  fill: none;
  stroke: var(--msv-outcome);
  stroke-width: 1.8px;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="er"] .msv-er-marker-onlyOne .msv-er-cardinality-glyph{ stroke: var(--msv-source); }
svg.mermaid-svg[data-msv-family="er"] .msv-er-marker-zeroOrOne .msv-er-cardinality-glyph{ stroke: var(--msv-decision); }
svg.mermaid-svg[data-msv-family="er"] .msv-er-marker-zeroOrMore .msv-er-cardinality-glyph{ stroke: var(--msv-reference); }
svg.mermaid-svg[data-msv-family="er"] .msv-er-label-pill{
  fill: var(--msv-paper-deep) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
  rx: 11px;
  ry: 11px;
}
svg.mermaid-svg[data-msv-family="er"] .edgeLabel text,svg.mermaid-svg[data-msv-family="er"] .edgeLabel tspan{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10px !important;
  font-weight: 750;
  letter-spacing: 0.04em;
}
svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-plot{
  fill: var(--msv-paper-deep) !important;
  fill: color-mix(in srgb, var(--msv-paper-deep) 52%, transparent) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-lane{
  fill: var(--msv-surface) !important;
  fill-opacity: 0.82 !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 0.75px !important;
}
svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task{
  fill: var(--msv-process) !important;
  stroke: var(--msv-process) !important;
  stroke-width: 1px !important;
  rx: 2px;
  ry: 2px;
}
svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.done0,svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.done1,svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.done2,svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.done3{
  fill: var(--msv-outcome) !important;
  stroke: var(--msv-outcome) !important;
}
svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.active0,svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.active1,svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.active2,svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-task.active3{
  fill: var(--msv-decision) !important;
  stroke: var(--msv-decision) !important;
}
svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-cap{
  stroke: var(--msv-paper) !important;
  stroke-width: 1.4px !important;
}
svg.mermaid-svg[data-msv-family="gantt"] .grid .tick line,svg.mermaid-svg[data-msv-family="gantt"] .grid .domain{
  stroke: var(--msv-rule) !important;
  stroke-width: 0.65px !important;
}
svg.mermaid-svg[data-msv-family="gantt"] .tick text,svg.mermaid-svg[data-msv-family="gantt"] .sectionTitle,svg.mermaid-svg[data-msv-family="gantt"] .taskText,svg.mermaid-svg[data-msv-family="gantt"] .taskTextOutsideRight,svg.mermaid-svg[data-msv-family="gantt"] .taskTextOutsideLeft{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10.5px !important;
  font-weight: 650;
}
svg.mermaid-svg[data-msv-family="gantt"] .msv-gantt-today{
  stroke: var(--msv-risk) !important;
  stroke-width: 1.5px !important;
  stroke-dasharray: 2 3 !important;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-donut-ring{
  fill: none !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1.25px !important;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-donut-slice{
  stroke: var(--msv-paper) !important;
  stroke-width: 2.5px !important;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-slice-0,svg.mermaid-svg[data-msv-family="pie"] .msv-legend-swatch-0{ fill: var(--msv-process) !important; }
svg.mermaid-svg[data-msv-family="pie"] .msv-slice-1,svg.mermaid-svg[data-msv-family="pie"] .msv-legend-swatch-1{ fill: var(--msv-decision) !important; }
svg.mermaid-svg[data-msv-family="pie"] .msv-slice-2,svg.mermaid-svg[data-msv-family="pie"] .msv-legend-swatch-2{ fill: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="pie"] .msv-slice-3,svg.mermaid-svg[data-msv-family="pie"] .msv-legend-swatch-3{ fill: var(--msv-reference) !important; }
svg.mermaid-svg[data-msv-family="pie"] .msv-slice-4,svg.mermaid-svg[data-msv-family="pie"] .msv-legend-swatch-4{ fill: var(--msv-risk) !important; }
svg.mermaid-svg[data-msv-family="pie"] .msv-slice-5,svg.mermaid-svg[data-msv-family="pie"] .msv-legend-swatch-5{ fill: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="pie"] .msv-donut-core{
  fill: var(--msv-paper) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-donut-core-label{
  fill: var(--msv-muted) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10px !important;
  font-weight: 750;
  letter-spacing: 1.25px;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-donut-core-value{
  fill: var(--msv-ink) !important;
  font-size: 21px !important;
  font-weight: 760;
}
svg.mermaid-svg[data-msv-family="pie"] .slice{
  fill: var(--msv-paper) !important;
  font-family: var(--msv-mono) !important;
  font-size: 12px !important;
  font-weight: 760;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-pie-legend-plate{
  fill: var(--msv-cluster) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 0.8px !important;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-pie-legend-card{
  fill: transparent !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="pie"] .msv-pie-legend-card[data-msv-highlighted]{
  fill: color-mix(in srgb, var(--msv-accent) 16%, transparent) !important;
}
svg.mermaid-svg[data-msv-family="pie"] .legend text{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 11px !important;
  font-weight: 650;
}
svg.mermaid-svg[data-msv-family="pie"] .legend text.msv-pie-legend-value{
  fill: var(--msv-muted) !important;
  font-weight: 700;
}
svg.mermaid-svg[data-msv-family="mindmap"] .msv-mindmap-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1px !important;
  filter: drop-shadow(0 1px 1.5px var(--msv-shadow));
}
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-level="root"] .msv-mindmap-card{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-source) !important;
}
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-level="branch"] .msv-mindmap-card{
  fill: var(--msv-outcome-soft) !important;
  stroke: var(--msv-outcome) !important;
}
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-depth="0"] .msv-mindmap-card{
  stroke-width: 1.75px !important;
  filter: drop-shadow(0 3px 6px var(--msv-shadow)) drop-shadow(0 1px 2px var(--msv-shadow));
}
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-depth="1"] .msv-mindmap-card{
  stroke-width: 1.5px !important;
  filter: drop-shadow(0 2px 4px var(--msv-shadow));
}
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-depth="2"] .msv-mindmap-card{
  stroke-width: 1.25px !important;
  filter: drop-shadow(0 1.5px 3px var(--msv-shadow));
}
svg.mermaid-svg[data-msv-family="mindmap"] .msv-mindmap-sheen{
  fill: color-mix(in srgb, var(--msv-surface) 55%, #ffffff) !important;
  stroke: none !important;
  opacity: 0.32;
  pointer-events: none;
}
svg.mermaid-svg[data-msv-family="mindmap"] .msv-mindmap-rail{
  fill: var(--msv-reference) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-level="root"] .msv-mindmap-rail{ fill: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-level="branch"] .msv-mindmap-rail{ fill: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="mindmap"] .msv-mindmap-branch{
  fill: none !important;
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1.4px !important;
}
svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node text,svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node tspan{
  fill: var(--msv-ink) !important;
  font-size: 12.5px !important;
  font-weight: 620 !important;
}
svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node[data-msv-depth="3"] text,svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node[data-msv-depth="3"] tspan,svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node[data-msv-depth="4"] text,svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node[data-msv-depth="4"] tspan,svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node[data-msv-depth="5"] text,svg.mermaid-svg[data-msv-family="mindmap"] .mindmap-node[data-msv-depth="5"] tspan{
  font-size: 11.5px !important;
  font-weight: 580 !important;
}
svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-level="root"] text,svg.mermaid-svg[data-msv-family="mindmap"] [data-msv-level="root"] tspan{
  fill: var(--msv-ink) !important;
  font-weight: 760 !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .msv-timeline-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1.1px !important;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(var(--msv-depth-shadow-soft));
}
svg.mermaid-svg[data-msv-family="timeline"] .msv-timeline-phase{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1.35px !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .msv-timeline-rail{
  fill: var(--msv-reference) !important;
  stroke: none !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .taskWrapper .msv-timeline-rail{ fill: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="timeline"] .msv-timeline-axis{
  stroke: var(--msv-line) !important;
  stroke-width: 2px !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .msv-timeline-guide{
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
  stroke-dasharray: 2 5 !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .msv-timeline-milestone{
  fill: var(--msv-paper) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 2px !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .taskWrapper text,svg.mermaid-svg[data-msv-family="timeline"] .taskWrapper tspan{
  fill: var(--msv-ink) !important;
  font-size: 13px !important;
  font-weight: 730 !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .eventWrapper text,svg.mermaid-svg[data-msv-family="timeline"] .eventWrapper tspan{
  fill: var(--msv-muted) !important;
  font-size: 11.5px !important;
  font-weight: 620 !important;
}
svg.mermaid-svg[data-msv-family="timeline"] .msv-timeline-subtitle{
  fill: var(--msv-muted) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10.5px !important;
  font-weight: 700;
  letter-spacing: 0.75px;
  text-transform: uppercase;
}
svg.mermaid-svg[data-msv-family="git-graph"] .msv-branch-lane{
  fill: var(--msv-surface) !important;
  fill-opacity: 0.72 !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 0.65px !important;
}
svg.mermaid-svg[data-msv-family="git-graph"] .msv-lane-0{ stroke: var(--msv-cycle-0) !important; fill: color-mix(in srgb, var(--msv-cycle-0) 14%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="git-graph"] .msv-lane-1{ stroke: var(--msv-cycle-1) !important; fill: color-mix(in srgb, var(--msv-cycle-1) 14%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="git-graph"] .msv-lane-2{ stroke: var(--msv-cycle-2) !important; fill: color-mix(in srgb, var(--msv-cycle-2) 14%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="git-graph"] .msv-lane-3{ stroke: var(--msv-cycle-3) !important; fill: color-mix(in srgb, var(--msv-cycle-3) 14%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="git-graph"] .msv-lane-4{ stroke: var(--msv-cycle-4) !important; fill: color-mix(in srgb, var(--msv-cycle-4) 14%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="git-graph"] .msv-lane-5{ stroke: var(--msv-cycle-5) !important; fill: color-mix(in srgb, var(--msv-cycle-5) 14%, var(--msv-surface)) !important; }
svg.mermaid-svg[data-msv-family="git-graph"] .branch,svg.mermaid-svg[data-msv-family="git-graph"] .msv-git-transition{
  fill: none !important;
  stroke: var(--msv-line) !important;
  stroke-width: 1.5px !important;
}
svg.mermaid-svg[data-msv-family="git-graph"] .msv-git-commit{
  fill: var(--msv-paper) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 2.5px !important;
}
svg.mermaid-svg[data-msv-family="git-graph"] .msv-git-commit.merge{
  fill: var(--msv-outcome-soft) !important;
  stroke: var(--msv-outcome) !important;
}
svg.mermaid-svg[data-msv-family="git-graph"] .msv-git-highlight{
  fill: var(--msv-decision-soft) !important;
  stroke: var(--msv-decision) !important;
  stroke-width: 2px !important;
}
svg.mermaid-svg[data-msv-family="git-graph"] .msv-git-label-card{
  fill: var(--msv-surface) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 0.8px !important;
  rx: 2px;
  ry: 2px;
}
svg.mermaid-svg[data-msv-family="git-graph"] .msv-git-tag-card{
  fill: var(--msv-outcome-soft) !important;
  stroke: var(--msv-outcome) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="git-graph"] .branchLabel,svg.mermaid-svg[data-msv-family="git-graph"] .commit-label,svg.mermaid-svg[data-msv-family="git-graph"] .tag-label{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10.5px !important;
  font-weight: 680;
}
svg.mermaid-svg[data-msv-family="sankey"] .msv-sankey-ribbon{
  fill: none !important;
  stroke: var(--msv-source) !important;
  stroke-opacity: 0.32 !important;
  stroke-linecap: butt;
  mix-blend-mode: multiply;
}
svg.mermaid-svg[data-theme="dark"][data-msv-family="sankey"] .msv-sankey-ribbon{ mix-blend-mode: screen; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-ribbon-0{ stroke: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-ribbon-1{ stroke: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-ribbon-2{ stroke: var(--msv-risk) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-ribbon-3{ stroke: var(--msv-reference) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-ribbon-4{ stroke: var(--msv-process) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-ribbon-5{ stroke: var(--msv-decision) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-sankey-port{
  fill: var(--msv-ink) !important;
  stroke: var(--msv-paper) !important;
  stroke-width: 2px !important;
}
svg.mermaid-svg[data-msv-family="sankey"] .msv-port-0{ fill: var(--msv-ink) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-port-1{ fill: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-port-2{ fill: var(--msv-risk) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-port-3{ fill: var(--msv-decision) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-port-4{ fill: var(--msv-process) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-port-5{ fill: var(--msv-reference) !important; }
svg.mermaid-svg[data-msv-family="sankey"] .msv-sankey-cap{
  fill: none;
  stroke: var(--msv-paper);
  stroke-width: 1.5px;
  opacity: 0.9;
}
svg.mermaid-svg[data-msv-family="sankey"] .msv-sankey-label{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 9.5px !important;
  font-weight: 650;
  letter-spacing: 0.01em;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-plot-field{
  fill: var(--msv-paper-deep) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-grid path{
  fill: none;
  stroke: var(--msv-grid-line);
  stroke-width: 1px;
  stroke-dasharray: 2 5;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-bar{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1.5px !important;
  filter: drop-shadow(0 3px 3px var(--msv-shadow));
}
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-series-0{ fill: var(--msv-source-soft) !important; stroke: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-series-1{ fill: var(--msv-reference-soft) !important; stroke: var(--msv-reference) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-series-2{ fill: var(--msv-outcome-soft) !important; stroke: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-series-3{ fill: var(--msv-risk-soft) !important; stroke: var(--msv-risk) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-series-4{ fill: color-mix(in srgb, var(--msv-process) 22%, var(--msv-paper)) !important; stroke: var(--msv-process) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-series-5{ fill: var(--msv-decision-soft) !important; stroke: var(--msv-decision) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-bar-cap{
  fill: none;
  stroke: var(--msv-surface);
  stroke-width: 2px;
  stroke-linecap: round;
  opacity: 0.9;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-line{
  fill: none !important;
  stroke: var(--msv-risk) !important;
  stroke-width: 3px !important;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-0{ stroke: var(--msv-cycle-4) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-1{ stroke: var(--msv-cycle-0) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-2{ stroke: var(--msv-cycle-5) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-3{ stroke: var(--msv-cycle-1) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-4{ stroke: var(--msv-cycle-2) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-5{ stroke: var(--msv-cycle-3) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-6{ stroke: var(--msv-cycle-6) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-line-series-7{ stroke: var(--msv-cycle-7) !important; }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-observation-ring{
  fill: var(--msv-paper);
  stroke: var(--msv-risk);
  stroke-width: 2px;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-observation-core{ fill: var(--msv-risk); }
svg.mermaid-svg[data-msv-family="xy-chart"] .msv-xy-annotation{
  fill: var(--msv-risk) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10px !important;
  font-weight: 700;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .bottom-axis path,svg.mermaid-svg[data-msv-family="xy-chart"] .left-axis path{
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .bottom-axis text,svg.mermaid-svg[data-msv-family="xy-chart"] .left-axis text{
  fill: var(--msv-muted) !important;
  font-family: var(--msv-mono) !important;
  font-size: 11px !important;
}
svg.mermaid-svg[data-msv-family="xy-chart"] .bottom-axis .title text,svg.mermaid-svg[data-msv-family="xy-chart"] .left-axis .title text{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-font) !important;
  font-size: 13px !important;
  font-weight: 650;
}
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-field{
  stroke: var(--msv-paper) !important;
  stroke-width: 4px !important;
}
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-1{ fill: var(--msv-outcome-soft) !important; }
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-2{ fill: var(--msv-source-soft) !important; }
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-3{ fill: var(--msv-risk-soft) !important; }
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-4{ fill: var(--msv-reference-soft) !important; }
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-heading{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-font) !important;
  font-size: 13px !important;
  font-weight: 700;
  letter-spacing: -0.01em;
}
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-code{
  fill: var(--msv-muted);
  font-family: var(--msv-mono);
  font-size: 9px;
  font-weight: 750;
  letter-spacing: 0.08em;
}
svg.mermaid-svg[data-msv-family="quadrant"] .border line{
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="quadrant"] .border line:nth-child(5),svg.mermaid-svg[data-msv-family="quadrant"] .border line:nth-child(6){
  stroke: var(--msv-ink) !important;
  stroke-width: 1.75px !important;
}
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-target{
  fill: var(--msv-paper);
  stroke: var(--msv-accent);
  stroke-width: 1.5px;
}
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-core{ fill: var(--msv-accent) !important; stroke: none !important; }
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-point-label{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10px !important;
  font-weight: 650;
}
svg.mermaid-svg[data-msv-family="quadrant"] .msv-quadrant-axis-label{
  fill: var(--msv-muted) !important;
  font-size: 12px !important;
  font-weight: 650;
}
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-ring{
  stroke: var(--msv-rule) !important;
  stroke-width: 1px !important;
}
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-ring-0{ fill: color-mix(in srgb, var(--msv-paper-deep) 54%, transparent) !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-ring-1{ fill: transparent !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-spoke{
  stroke: var(--msv-rule-strong) !important;
  stroke-width: 1px !important;
  stroke-dasharray: 2 5;
}
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-profile{
  stroke-width: 2.4px !important;
  stroke-linejoin: round;
  fill-opacity: 0.14 !important;
}
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-profile-0{ fill: var(--msv-source) !important; stroke: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-profile-1{ fill: var(--msv-outcome) !important; stroke: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-profile-2{ fill: var(--msv-risk) !important; stroke: var(--msv-risk) !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-profile-3{ fill: var(--msv-reference) !important; stroke: var(--msv-reference) !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-profile-4{ fill: var(--msv-process) !important; stroke: var(--msv-process) !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-profile-5{ fill: var(--msv-decision) !important; stroke: var(--msv-decision) !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-vertex{
  fill: var(--msv-paper) !important;
  stroke-width: 2px !important;
}
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-hub{ fill: var(--msv-ink); stroke: var(--msv-paper); stroke-width: 2px; }
svg.mermaid-svg[data-msv-family="radar"] .radarAxisLabel{ fill: var(--msv-ink) !important; font-size: 12px !important; font-weight: 650; }
svg.mermaid-svg[data-msv-family="radar"] .radarLegendText{ fill: var(--msv-muted) !important; font-family: var(--msv-mono) !important; font-size: 10px !important; }
svg.mermaid-svg[data-msv-family="radar"] .msv-radar-legend-swatch{ stroke: var(--msv-paper) !important; stroke-width: 2px !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-section-field{
  fill: color-mix(in srgb, var(--msv-cluster) 68%, transparent) !important;
  stroke: var(--msv-paper) !important;
  stroke-width: 5px !important;
}
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-section-0 .msv-treemap-section-field{ fill: color-mix(in srgb, var(--msv-cycle-0) 30%, var(--msv-cluster)) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-section-1 .msv-treemap-section-field{ fill: color-mix(in srgb, var(--msv-cycle-1) 30%, var(--msv-cluster)) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-section-2 .msv-treemap-section-field{ fill: color-mix(in srgb, var(--msv-cycle-2) 30%, var(--msv-cluster)) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-section-3 .msv-treemap-section-field{ fill: color-mix(in srgb, var(--msv-cycle-3) 30%, var(--msv-cluster)) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-section-4 .msv-treemap-section-field{ fill: color-mix(in srgb, var(--msv-cycle-4) 30%, var(--msv-cluster)) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-section-5 .msv-treemap-section-field{ fill: color-mix(in srgb, var(--msv-cycle-5) 30%, var(--msv-cluster)) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-header{
  fill: var(--msv-ink) !important;
  stroke: var(--msv-paper) !important;
  stroke-width: 2px !important;
}
svg.mermaid-svg[data-msv-family="treemap"] .treemapSection > text,svg.mermaid-svg[data-msv-family="treemap"] .treemapSection > .nodeLabel{
  fill: var(--msv-paper) !important;
  font-family: var(--msv-mono) !important;
  font-size: 10px !important;
  font-weight: 750;
  letter-spacing: 0.04em;
}
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-leaf{
  fill: var(--msv-source-soft) !important;
  stroke: var(--msv-paper) !important;
  stroke-width: 3px !important;
}
svg.mermaid-svg[data-msv-family="treemap"] .msv-leaf-0{ fill: var(--msv-source-soft) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-leaf-1{ fill: var(--msv-reference-soft) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-leaf-2{ fill: var(--msv-outcome-soft) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-leaf-3{ fill: var(--msv-decision-soft) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-leaf-4{ fill: var(--msv-risk-soft) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .msv-leaf-5{ fill: var(--msv-paper-deep) !important; }
svg.mermaid-svg[data-msv-family="treemap"] .treemapNode text,svg.mermaid-svg[data-msv-family="treemap"] .treemapNode tspan{
  fill: var(--msv-ink) !important;
  font-weight: 650;
}
svg.mermaid-svg[data-msv-family="treemap"] .msv-treemap-registration{
  fill: none;
  stroke: var(--msv-rule-strong);
  stroke-width: 1.5px;
}
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-zone{
  fill: color-mix(in srgb, var(--msv-cluster) 58%, transparent) !important;
  stroke: var(--msv-rule) !important;
  stroke-width: 1.5px !important;
  stroke-dasharray: none !important;
}
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-0{ fill: color-mix(in srgb, var(--msv-cluster) 58%, transparent) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-1{ fill: color-mix(in srgb, var(--msv-source-soft) 55%, transparent) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-2{ fill: color-mix(in srgb, var(--msv-reference-soft) 52%, transparent) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-3{ fill: color-mix(in srgb, var(--msv-risk-soft) 52%, transparent) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-4{ fill: color-mix(in srgb, var(--msv-decision-soft) 52%, transparent) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-5{ fill: color-mix(in srgb, var(--msv-outcome-soft) 52%, transparent) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-zone-rail{
  fill: none;
  stroke: var(--msv-source);
  stroke-width: 8px;
  stroke-linecap: round;
}
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-zone-label{
  fill: var(--msv-muted);
  font-family: var(--msv-mono);
  font-size: 10px;
  font-weight: 750;
  letter-spacing: 0.06em;
}
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-1.msv-architecture-zone-rail{ stroke: var(--msv-outcome); }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-2.msv-architecture-zone-rail{ stroke: var(--msv-reference); }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-3.msv-architecture-zone-rail{ stroke: var(--msv-risk); }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-4.msv-architecture-zone-rail{ stroke: var(--msv-decision); }
svg.mermaid-svg[data-msv-family="architecture"] .msv-zone-5.msv-architecture-zone-rail{ stroke: var(--msv-process); }
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-card{
  fill: var(--msv-surface);
  stroke: var(--msv-rule-strong);
  stroke-width: 1.5px;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(0 8px 20px color-mix(in srgb, var(--msv-shadow) 62%, transparent));
}
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-rule{ fill: none; stroke: var(--msv-rule); stroke-width: 1px; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-0 .msv-service-rule{ stroke: var(--msv-cycle-0) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-1 .msv-service-rule{ stroke: var(--msv-cycle-1) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-2 .msv-service-rule{ stroke: var(--msv-cycle-2) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-3 .msv-service-rule{ stroke: var(--msv-cycle-3) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-4 .msv-service-rule{ stroke: var(--msv-cycle-4) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-service-5 .msv-service-rule{ stroke: var(--msv-cycle-5) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .architecture-service > g > g > svg{ border-radius: 5px; overflow: hidden; }
svg.mermaid-svg[data-msv-family="architecture"] .architecture-service svg > g > rect:first-child{ fill: var(--msv-source) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .architecture-service:nth-child(3n+2) svg > g > rect:first-child{ fill: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .architecture-service:nth-child(3n+3) svg > g > rect:first-child{ fill: var(--msv-reference) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .architecture-service text,svg.mermaid-svg[data-msv-family="architecture"] .architecture-groups text{
  fill: var(--msv-ink) !important;
  font-family: var(--msv-mono) !important;
  font-size: 14px !important;
  font-weight: 700;
}
svg.mermaid-svg[data-msv-family="architecture"] .architecture-groups svg{ opacity: 0.7; }
svg.mermaid-svg[data-msv-family="architecture"] .architecture-groups svg > g > rect:first-child{ fill: var(--msv-muted) !important; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-switchboard rect{
  fill: var(--msv-decision-soft);
  stroke: var(--msv-decision);
  stroke-width: 2px;
}
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-switchboard path{ fill: none; stroke: var(--msv-decision); stroke-width: 2px; }
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-switchboard circle{ fill: var(--msv-decision); }
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-link{
  fill: none !important;
  stroke: var(--msv-process) !important;
  stroke-width: 2px !important;
  stroke-linecap: round;
  stroke-linejoin: round;
}
svg.mermaid-svg[data-msv-family="architecture"] .msv-architecture-arrow{ fill: var(--msv-process) !important; }
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-card{
  fill: var(--msv-surface);
  stroke: var(--msv-rule-strong);
  stroke-width: 1.5px;
  filter: drop-shadow(var(--msv-depth-shadow-tight)) drop-shadow(0 8px 20px color-mix(in srgb, var(--msv-shadow) 62%, transparent));
}
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-header{ fill: var(--msv-source); }
svg.mermaid-svg[data-msv-family="requirement"] [data-msv-kind="evidence-element"] .msv-requirement-header{ fill: var(--msv-reference); }
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-header-rule{ fill: none; stroke: var(--msv-paper); stroke-width: 1.5px; opacity: 0.6; }
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-index-rule{ fill: none; stroke: var(--msv-accent); stroke-width: 3px; }
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-risk{ fill: var(--msv-outcome); }
svg.mermaid-svg[data-msv-family="requirement"] [data-msv-risk="medium"] .msv-requirement-risk{ fill: var(--msv-decision); }
svg.mermaid-svg[data-msv-family="requirement"] [data-msv-risk="high"] .msv-requirement-risk{ fill: var(--msv-risk); }
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-title-label text,svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-title-label tspan{
  fill: var(--msv-paper) !important;
  color: var(--msv-paper) !important;
}
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-title-label:first-of-type text{
  font-family: var(--msv-mono) !important;
  font-size: 12px !important;
  letter-spacing: 0.04em;
}
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-detail-label text,svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-detail-label tspan{
  fill: var(--msv-ink) !important;
  color: var(--msv-ink) !important;
  font-size: 12px !important;
}
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-relation{
  fill: none !important;
  stroke: var(--msv-source) !important;
  stroke-width: 1.7px !important;
  stroke-dasharray: 7 5 !important;
}
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-relation[data-msv-relation="verifies"]{ stroke: var(--msv-outcome) !important; }
svg.mermaid-svg[data-msv-family="requirement"] .msv-requirement-relation[data-msv-relation="traces"]{ stroke: var(--msv-reference) !important; stroke-dasharray: 2 5 !important; }
svg.mermaid-svg[data-msv-family="requirement"] .edgeLabel text,svg.mermaid-svg[data-msv-family="requirement"] .edgeLabel tspan{ font-family: var(--msv-mono) !important; font-size: 12px !important; font-weight: 700; }
svg.mermaid-svg[data-msv-rendering="qa"] .msv-artwork,svg.mermaid-svg[data-msv-rendering="qa"] .msv-eyebrow,svg.mermaid-svg[data-msv-rendering="qa"] .msv-visible-title,svg.mermaid-svg[data-msv-rendering="qa"] .msv-figure-code,svg.mermaid-svg[data-msv-rendering="qa"] .msv-header-accent,svg.mermaid-svg[data-msv-rendering="qa"] .node,svg.mermaid-svg[data-msv-rendering="qa"] .edgePaths path,svg.mermaid-svg[data-msv-rendering="qa"] .edgeLabel,svg.mermaid-svg[data-msv-rendering="qa"] [data-msv-component],svg.mermaid-svg[data-msv-rendering="qa"] .msv-donut-ring,svg.mermaid-svg[data-msv-rendering="qa"] .msv-timeline-milestone{
  animation: none !important;
  opacity: 1 !important;
  stroke-dashoffset: 0 !important;
}
@media (prefers-reduced-motion: no-preference){svg.mermaid-svg[data-msv-motion="entrance"] .msv-eyebrow,svg.mermaid-svg[data-msv-motion="entrance"] .msv-figure-code{
    animation: msv-fade-in 220ms cubic-bezier(0.23, 1, 0.32, 1) both;
  }
svg.mermaid-svg[data-msv-motion="entrance"] .msv-visible-title{
    animation: msv-fade-in 280ms 55ms cubic-bezier(0.23, 1, 0.32, 1) both;
  }
svg.mermaid-svg[data-msv-motion="entrance"] .msv-header-accent{
    stroke-dasharray: 1;
    animation: msv-line-draw 360ms 80ms cubic-bezier(0.23, 1, 0.32, 1) both;
  }
svg.mermaid-svg[data-msv-motion="entrance"] .msv-artwork{
    animation: msv-fade-in 180ms 80ms cubic-bezier(0.23, 1, 0.32, 1) both;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .node{
    animation: msv-fade-in 260ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(110ms + var(--msv-order, 0) * 32ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .edgePaths path.edge-pattern-solid:not(.edge-pattern-dashed):not(.edge-pattern-dotted):not([data-msv-path="positive"]):not([data-msv-path="negative"]):not([data-msv-path="warning"]):not([data-msv-path="exception"]):not([data-msv-path="feedback"]),svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .edgePaths path.flowchart-link:not(.edge-pattern-dashed):not(.edge-pattern-dotted):not([data-msv-path="positive"]):not([data-msv-path="negative"]):not([data-msv-path="warning"]):not([data-msv-path="exception"]):not([data-msv-path="feedback"]){
    stroke-dasharray: 1 !important;
    animation: msv-line-draw 420ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(90ms + var(--msv-order, 0) * 24ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .flowchart-link[data-msv-path="positive"]{
    stroke-dasharray: 0.075 0.055 !important;
    animation: msv-flow-positive 2.35s linear infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .flowchart-link[data-msv-path="negative"]{
    stroke-dasharray: 0.022 0.04 0.085 0.04 !important;
    animation: msv-flow-negative 1.55s linear infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .flowchart-link[data-msv-path="warning"]{
    stroke-dasharray: 0.05 0.035 !important;
    animation: msv-flow-positive 3s linear infinite, msv-warn-blink 1.9s ease-in-out infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .flowchart-link[data-msv-path="exception"]{
    stroke-dasharray: 0.02 0.03 0.06 0.03 !important;
    animation: msv-flow-negative 1.05s linear infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .flowchart-link[data-msv-path="feedback"]{
    stroke-dasharray: 0.06 0.05 !important;
    animation: msv-flow-negative 2.6s linear infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="flowchart"] .edgeLabel{
    animation: msv-fade-in 180ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(230ms + var(--msv-order, 0) * 24ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] [data-msv-component="participant"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] [data-msv-component="human-participant"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] [data-msv-component="callout"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] [data-msv-component="activation"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] [data-msv-component="fragment"]{
    animation: msv-fade-in 260ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(100ms + var(--msv-order, 0) * 45ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] [data-msv-component="lifeline"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] [data-msv-component="message-label"]{
    animation: msv-fade-in 220ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(160ms + var(--msv-order, 0) * 32ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] .messageLine0[data-msv-component="message"]{
    stroke-dasharray: 1 !important;
    animation: msv-line-draw 360ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(170ms + var(--msv-order, 0) * 42ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] .messageLine1[data-msv-component="message"]{
    animation: msv-fade-in 240ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(180ms + var(--msv-order, 0) * 42ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] [data-msv-component$="state"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] [data-msv-component="state-note"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] [data-msv-component="synchronization"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="class"] [data-msv-component="class-record"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="er"] [data-msv-component="entity-table"]{
    animation: msv-fade-in 280ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(110ms + var(--msv-order, 0) * 44ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] [data-msv-component="transition"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="class"] [data-msv-component="class-relation"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="er"] [data-msv-component="relationship"]:not([data-msv-relationship="associative"]):not([data-msv-relationship="optional"]){
    stroke-dasharray: 1 !important;
    animation: msv-line-draw 420ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(100ms + var(--msv-order, 0) * 34ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="er"] [data-msv-component="relationship-label"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="er"] [data-msv-component="relationship"][data-msv-relationship="associative"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="er"] [data-msv-component="relationship"][data-msv-relationship="optional"]{
    animation: msv-fade-in 240ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(170ms + var(--msv-order, 0) * 36ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] [data-msv-component="transition-label"]{
    animation: msv-fade-in 180ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(220ms + var(--msv-order, 0) * 34ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] .msv-state-port,svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sequence"] .msv-lifeline-terminal{
    transform-box: fill-box;
    transform-origin: center;
    animation: msv-signal-pulse 2.8s ease-in-out infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] .msv-sync-rung{
    animation: msv-sync-conduct 1.7s ease-in-out infinite;
    animation-delay: calc(var(--msv-order, 0) * -0.42s);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="state"] .msv-sync-pip{
    transform-box: fill-box;
    transform-origin: center;
    animation: msv-signal-pulse 2.4s ease-in-out infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="gantt"] [data-msv-component="task"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="gantt"] [data-msv-component="task-label"]{
    animation: msv-fade-in 260ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(120ms + var(--msv-order, 0) * 50ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="pie"] .msv-donut-ring{
    stroke-dasharray: 1;
    animation: msv-line-draw 420ms 100ms cubic-bezier(0.23, 1, 0.32, 1) both;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="pie"] [data-msv-component="slice"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="pie"] [data-msv-component="legend-item"]{
    animation: msv-fade-in 300ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(130ms + var(--msv-order, 0) * 64ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="mindmap"] [data-msv-component="branch"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="timeline"] [data-msv-component="axis"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="commit-path"]{
    stroke-dasharray: 1 !important;
    animation: msv-line-draw 420ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(90ms + var(--msv-order, 0) * 36ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="mindmap"] [data-msv-component="concept"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="timeline"] [data-msv-component="phase"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="timeline"] [data-msv-component="event"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="commit"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="merge-commit"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="highlight-commit"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="commit-label"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="tag"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="tag-label"]{
    animation: msv-fade-in 280ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(120ms + var(--msv-order, 0) * 46ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="timeline"] [data-msv-component="guide"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="git-graph"] [data-msv-component="branch-rail"]{
    animation: msv-fade-in 220ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(130ms + var(--msv-order, 0) * 34ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sankey"] [data-msv-component="value-port"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sankey"] [data-msv-component="value-label"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="xy-chart"] [data-msv-component="bar"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="xy-chart"] [data-msv-component="observation"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="quadrant"] [data-msv-component="decision-field"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="quadrant"] [data-msv-component="priority-point"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="radar"] [data-msv-component="capability-profile"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="radar"] [data-msv-component="profile-observation"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="radar"] [data-msv-component="profile-key"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="treemap"] [data-msv-component="category-region"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="treemap"] [data-msv-component="allocation-cell"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="architecture"] [data-msv-component="system-zone"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="architecture"] [data-msv-component="service-module"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="architecture"] [data-msv-component="policy-junction"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="requirement"] [data-msv-component="requirement-contract"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="requirement"] [data-msv-component="evidence-element"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="requirement"] [data-msv-component="requirement-relation"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="requirement"] [data-msv-component="relation-label"]{
    animation: msv-fade-in 300ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(100ms + var(--msv-order, 0) * 42ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="xy-chart"] [data-msv-component="trend-line"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="xy-chart"] [data-msv-component="measurement-axis"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="radar"] [data-msv-component="capability-axis"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="architecture"] [data-msv-component="system-link"]{
    stroke-dasharray: 1 !important;
    animation: msv-line-draw 480ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(80ms + var(--msv-order, 0) * 36ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="sankey"] [data-msv-component="value-flow"]{
    animation: msv-sankey-breathe 4.8s ease-in-out infinite;
    animation-delay: calc(var(--msv-order, 0) * -180ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="architecture"] [data-msv-component="system-link"]{
    stroke-dasharray: 0.055 0.035 !important;
    animation: msv-system-signal 3.2s linear infinite;
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-family="radar"] .msv-radar-vertex{
    transform-box: fill-box;
    transform-origin: center;
    animation: msv-radar-scan 4.6s ease-in-out infinite;
    animation-delay: calc(var(--msv-order, 0) * 90ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-presentation="mermaid"] [data-msv-component="native-element"]{
    animation: msv-fade-in 240ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(40ms + var(--msv-order, 0) * 24ms);
  }
svg.mermaid-svg[data-msv-motion="entrance"][data-msv-presentation="mermaid"] path[data-msv-component="native-element"][pathLength="1"],svg.mermaid-svg[data-msv-motion="entrance"][data-msv-presentation="mermaid"] line[data-msv-component="native-element"][pathLength="1"]{
    stroke-dasharray: 1 !important;
    animation: msv-line-draw 380ms cubic-bezier(0.23, 1, 0.32, 1) both;
    animation-delay: calc(40ms + var(--msv-order, 0) * 24ms);
  }}
@keyframes msv-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes msv-line-draw {
  from { stroke-dashoffset: 1; }
  to { stroke-dashoffset: 0; }
}
@keyframes msv-flow-positive {
  from { stroke-dashoffset: 0.26; }
  to { stroke-dashoffset: 0; }
}
@keyframes msv-flow-negative {
  from { stroke-dashoffset: 0; }
  to { stroke-dashoffset: 0.28; }
}
@keyframes msv-warn-blink {
  0%, 100% { stroke-opacity: 1; }
  50% { stroke-opacity: 0.5; }
}
@keyframes msv-sync-conduct {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 1; }
}
@keyframes msv-signal-pulse {
  0%, 72%, 100% { transform: scale(1); opacity: 0.72; }
  82% { transform: scale(1.65); opacity: 1; }
}
@keyframes msv-sankey-breathe {
  0%, 100% { stroke-opacity: 0.24; }
  48% { stroke-opacity: 0.44; }
}
@keyframes msv-system-signal {
  from { stroke-dashoffset: 0.18; }
  to { stroke-dashoffset: 0; }
}
@keyframes msv-radar-scan {
  0%, 76%, 100% { transform: scale(1); }
  84% { transform: scale(1.45); }
}
@media (prefers-reduced-motion: reduce){svg.mermaid-svg.mermaid-svg *{
    animation: none !important;
    transition: none !important;
  }}