/* Page-scoped diagram; no styles or controller are loaded on other routes. */
.flow-page .page-heading{max-width:1000px}.flow-page .page-heading h1{font-size:43px;line-height:1.15}.flow-page p{line-height:1.8}
.flow-disclosure{padding:18px 22px;border-left:3px solid #668551;background:#edf2e5;border-radius:0 8px 8px 0;color:#46583d;font-size:13px}
.flow-demo{border-top:1px solid var(--line);padding-top:22px;scroll-margin-top:100px}.flow-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:20px}.flow-tabs button{padding:15px 12px;background:#eef2e8;color:#344c30;border:1px solid #d2ddc8;border-radius:7px;font-size:13px;font-weight:650;min-height:48px}.flow-tabs button[aria-selected=true]{background:var(--green);color:#fff;border-color:var(--green)}
.flow-controls{display:flex;flex-wrap:wrap;gap:9px}.flow-controls .button{font-size:12px;min-height:44px;padding:10px 16px}.flow-controls button:disabled{opacity:.45;transform:none}.flow-toolbar{padding:20px;border:1px solid var(--line);border-radius:9px;background:#fff}#flow-status{font-size:13px;font-weight:650;margin:15px 0 8px;color:#344c30}.flow-keys{font-size:11px;color:var(--muted);margin:0 0 14px}
.flow-timeline{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:6px}.flow-timeline button{width:38px;min-height:38px;border:1px solid #b8c8ac;border-radius:5px;background:#f6f8f1;color:#3c5431;font-size:12px;font-weight:600}.flow-timeline button[aria-pressed=true]{background:var(--green);color:white;border-color:var(--green)}.flow-timeline button.involves-node{box-shadow:inset 0 -4px 0 #8c6527}.flow-timeline button[data-wait=true]{border-style:dashed}
.flow-legend{display:flex;flex-wrap:wrap;gap:9px 15px;list-style:none;padding:0;margin:22px 0}.flow-legend li{font-size:11px}.flow-event{display:inline-flex;align-items:center;gap:7px;color:var(--event);font-size:11px;font-weight:650}.flow-event b{display:inline-grid;place-items:center;width:23px;min-height:23px;border:1px solid currentColor;border-radius:5px;font-size:14px;line-height:1}
.flow-layout{min-width:0}.flow-map{min-width:0;border:1px solid #d6dfcf;border-radius:12px;padding:16px;background:#f1f5eb;align-self:start}.flow-map-heading{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:4px}.flow-map-heading h2{font-size:22px;letter-spacing:-.5px;margin:0}.flow-map-heading>span,.flow-map-note{font-size:11px;color:var(--muted)}.flow-map-note{margin:8px 0}.flow-svg{display:block;width:100%;height:auto;font-family:var(--font)}.flow-svg-narrow{display:none}
.flow-edges>g{display:none}.flow-edges>g[data-static]{display:block}.flow-line{fill:none;stroke:#bcc8b2;stroke-width:1.5}.flow-packet{display:none;fill:var(--event,#28583f);stroke:white;stroke-width:1.5}.flow-node rect{fill:#fff;stroke:#adbea1;stroke-width:1.5}.flow-node-title{fill:#263d2c;font-size:16px;font-weight:650}.flow-node-sub{fill:#52614b;font-size:14px}.flow-node-dot{display:none;fill:var(--event,#28583f)}
.flow-ready .flow-edges>g{display:none}.flow-ready .flow-edges>g.is-active{display:block}.flow-ready .flow-edges>g.is-active .flow-line{stroke:var(--event);stroke-width:2.5}.flow-ready .flow-edges>g.is-active .flow-packet{display:block}.flow-ready .flow-node{cursor:pointer}.flow-ready .flow-node.unused rect{fill:#f0f1ed;stroke:#c5cebd;stroke-dasharray:4 4}.flow-ready .flow-node.unused text{fill:#5f665f}.flow-ready .flow-node.is-active rect{fill:#e1edd4;stroke:var(--event);stroke-width:2.5}.flow-ready .flow-node.is-active .flow-node-dot{display:block}.flow-ready .flow-node[aria-pressed=true] rect{stroke:#80571f;stroke-width:3}.flow-node:focus-visible{outline:none}.flow-node:focus-visible rect{stroke:#142b20;stroke-width:4;stroke-dasharray:5 2}
.flow-node-help{padding:14px;border:1px solid #cbd9be;background:#fff;border-radius:7px;font-size:12px;margin-top:14px}.flow-node-help strong{display:block;margin-bottom:6px}.flow-node-help p{margin:0}.flow-node-help small{display:block;margin-top:8px;font-size:11px;color:var(--muted)}
.flow-inspector{min-width:0;margin-top:22px}.flow-inspector>section{min-width:0;margin-bottom:30px}.flow-inspector h2{font-size:23px;line-height:1.25;margin:0 0 10px}.flow-scenario-note{font-size:12px;color:var(--muted);margin-bottom:18px}.flow-step-list{padding-left:24px}.flow-step-list>li{margin-bottom:25px;padding:20px;border:1px solid var(--line);background:white;border-radius:9px;min-width:0}.flow-step-list h3{font-size:25px;line-height:1.25;margin:14px 0}.flow-step-list p{font-size:13px}.flow-step-meta{display:flex;flex-wrap:wrap;gap:8px 15px;align-items:center;margin-bottom:15px}.flow-step-meta>span:last-child{font-size:11px;color:var(--muted)}.flow-route{font-size:11px!important;color:#52614b;border-bottom:1px solid var(--line);padding-bottom:12px}.flow-compute{border:1px solid #d8e1d1;border-radius:6px;background:#f3f5ef;padding:10px;font-size:12px!important;color:#405637}.flow-compute.uses-gpu{background:#e7f0dc;border-color:#aabd94;color:#294b28}.flow-wait{background:#fbf0e2;border-left:3px solid #8a452d;padding:13px;color:#763c25}.flow-context label{font-size:12px;color:#4c6040;font-weight:500}.flow-context progress{display:block;width:100%;height:8px;accent-color:var(--green);margin:10px 0 14px}.flow-context p{font-size:11px}
.flow-memory{border:1px solid #dce3d5;padding:12px;border-radius:6px;background:#f4f7ee;margin:16px 0}.flow-memory summary{font-size:12px;font-weight:650;cursor:pointer;color:#344f2f}.flow-memory p{font-size:11px;margin:10px 0 0;color:var(--muted)}.flow-memory dl{margin:12px 0;font-size:12px}.flow-memory dl>div{display:flex;flex-wrap:wrap;justify-content:space-between;gap:5px;border-bottom:1px solid #dde5d5;padding:6px 0}.flow-memory dd{margin:0;font-weight:650}.flow-memory dt{color:var(--muted)}
.flow-payload{margin-top:16px;min-width:0}.flow-payload h4{font-size:11px;line-height:1.6;font-weight:600;color:#52614b;margin:0 0 7px}.flow-payload pre{max-width:100%;overflow:auto;max-height:350px;padding:16px;background:#203d32;color:#e8f1de;border-radius:7px;font:12px/1.75 Consolas,monospace;white-space:pre;margin:0}.flow-payload code{font:inherit;color:inherit}.flow-result-links{display:flex;flex-direction:column;gap:10px;margin-top:17px}.flow-result-links a,.flow-notes a{color:#355b2d;text-decoration:underline;text-underline-offset:3px;font-size:13px;overflow-wrap:anywhere}
.flow-glossary{margin-top:25px;padding:18px 22px;border:1px solid var(--line);border-radius:9px;background:#f4f6ef}.flow-glossary summary{cursor:pointer;font-size:14px;font-weight:600}.flow-glossary dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.flow-glossary dt{font-size:15px;font-weight:650}.flow-glossary dd{font-size:13px;margin:6px 0;color:var(--muted)}.flow-notes{max-width:970px}.flow-notes li,.flow-sources li{font-size:14px;line-height:1.85;margin-bottom:10px}.flow-sources p{font-size:13px;color:var(--muted)}.flow-sources a{text-decoration:underline;text-underline-offset:3px}.flow-sources article{padding:20px;background:#f0f4e9;border:1px solid var(--line);border-radius:8px;margin:14px 0;scroll-margin-top:110px}.flow-sources article h3{font-size:20px;margin-bottom:12px}.flow-sources blockquote{font-size:14px;margin:0 0 15px}.flow-sources code{overflow-wrap:anywhere}
.flow-ready .flow-step-list{list-style:none;margin:0;padding:0}.flow-ready .flow-inspector{margin:0}.flow-ready .flow-inspector>section{margin:0}
.flow-target h4{font-size:13px;line-height:1.5;margin:0;color:#344f2f}
.flow-vram{padding:14px;background:#e7efdd;border:1px solid #c2d2b4;border-radius:7px;color:#344c30;font-size:12px;margin:10px 0}.flow-vram strong{font-size:13px}.flow-vram p{font-size:12px;margin:8px 0 0;line-height:1.7}#flow-vram-state{font-size:11px}
@media(min-width:1024px){.flow-ready .flow-layout{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(340px,1fr);gap:22px}.flow-ready .flow-map{position:sticky;top:100px}.flow-page:not(:has(.flow-ready)) .flow-map{max-width:720px}}
@media(max-width:1023px){.flow-svg-wide{display:none}.flow-svg-narrow{display:block;max-width:450px;margin:auto}.flow-ready .flow-inspector{margin-top:22px}.flow-page .page-heading h1{font-size:36px}.flow-map{padding:14px}.flow-glossary dl{grid-template-columns:1fr}}
@media(max-width:450px){.flow-page .page-heading h1{font-size:31px}.flow-tabs{grid-template-columns:1fr;gap:7px}.flow-tabs button{text-align:left;padding:12px}.flow-toolbar{padding:14px}.flow-controls{display:grid;grid-template-columns:1fr 1fr;gap:7px}.flow-controls .button{gap:6px;padding:10px 8px;font-size:11px}.flow-map{padding:10px}.flow-step-list>li{padding:16px}.flow-inspector h2{font-size:22px}.flow-step-list h3{font-size:23px}.flow-disclosure{padding:16px}.flow-notes ul{padding-left:22px}.flow-sources ul{padding-left:20px}.flow-sources a{overflow-wrap:anywhere}}
@media(prefers-reduced-motion:reduce){.flow-ready .flow-edges>g.is-active .flow-packet{display:none}}
@media print{.flow-tabs,.flow-toolbar{display:none!important}.flow-layout{display:block!important}.flow-map{position:static!important}.flow-inspector [hidden]{display:block!important}.flow-payload pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:none}.flow-packet{display:none!important}}

/* Controls belong to the map: keep the active route in view during stepping. */
.flow-ready .flow-toolbar{padding:0 0 12px;border:0;border-bottom:1px solid #d0dcc5;border-radius:0;background:transparent;margin-bottom:10px}
.flow-ready .flow-controls{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
.flow-ready .flow-controls .button{font-size:12px;min-height:36px;padding:7px 8px;gap:6px}
.flow-ready #flow-status{font-size:12px;line-height:1.5;margin:8px 0}
.flow-ready .flow-timeline{display:grid;grid-template-columns:repeat(14,minmax(0,1fr));gap:4px}
.flow-ready .flow-timeline button{width:100%;min-height:28px;padding:3px 0;font-size:11px}
.flow-ready .flow-map-heading h2{font-size:19px}.flow-map-heading{min-height:27px}#flow-event-label{font-size:12px;font-weight:650}
.flow-line-halo{fill:none;stroke:#fff;stroke-width:8;stroke-linejoin:round}.flow-ready .flow-edges>g.is-active .flow-line{stroke-width:3.5;stroke-linejoin:round}.flow-packet{stroke-width:2}
@media(min-width:1024px){.flow-ready .flow-map{top:var(--flow-top,100px);padding:12px}.flow-ready .flow-svg-wide{max-height:calc(100vh - 280px);max-height:calc(100dvh - 280px)}}
@media(max-width:1023px){.flow-page-active{padding-bottom:80px}.flow-ready .flow-controls{position:fixed;bottom:0;left:12px;right:12px;z-index:40;padding:10px 8px calc(10px + env(safe-area-inset-bottom));border:1px solid #b8c8ac;border-radius:9px 9px 0 0;background:#f5f8ee;box-shadow:0 -4px 20px #203d3220}.flow-ready .flow-controls .button{font-size:11px;min-height:44px;padding:8px 4px;gap:0}.flow-ready .flow-timeline{grid-template-columns:repeat(7,minmax(0,1fr))}.flow-ready .flow-timeline button{min-height:36px}.flow-ready #flow-status{margin-top:0}}
@media print{.flow-page-active{padding-bottom:0}.flow-ready .flow-svg-wide{max-height:none}}

/* Routed topology stays faint; direction is carried by explicit screen-sized
   arrowheads, painted after the nodes rather than underneath their borders. */
.flow-edges>g,.flow-ready .flow-edges>g{display:block}.flow-line{vector-effect:non-scaling-stroke;stroke:#cbd5c5;stroke-width:1;stroke-linejoin:round;fill:none;pointer-events:none}
.flow-line-halo{display:none;vector-effect:non-scaling-stroke;stroke-width:9;pointer-events:none}.flow-ready .flow-edges>g.is-active .flow-line-halo{display:block}
.flow-ready .flow-edges>g.is-active .flow-line{stroke:var(--event);stroke-width:4;stroke-dasharray:9 6;animation:none}.flow-ready .flow-edges>g.is-current .flow-line{stroke-width:4.5;animation:flow-dash .8s linear infinite}
.flow-ready[data-route-paused=true] .flow-line{animation-play-state:paused!important}
.flow-overlays>g{display:none}.flow-ready .flow-overlays>g.is-active{display:block}.flow-arrow{fill:var(--event);stroke:#fff;stroke-width:1;vector-effect:non-scaling-stroke;pointer-events:all}
.flow-edge-chip{pointer-events:none}.flow-edge-chip rect{fill:#fff;stroke:var(--event);stroke-width:1;vector-effect:non-scaling-stroke}.flow-edge-chip text{fill:#24382d;font-size:19px;font-weight:650}.flow-ready .flow-overlays>g .flow-packet{display:none;pointer-events:none}.flow-ready .flow-overlays>g.is-current .flow-packet{display:block;fill:var(--event);vector-effect:non-scaling-stroke;stroke-width:2}
.flow-ready .flow-node.is-active rect{stroke:#697b6c;fill:#dfeccf;stroke-width:2;vector-effect:non-scaling-stroke}.flow-node-title{font-size:20px}.flow-node-sub{font-size:19px}.flow-svg-narrow .flow-node-title,.flow-svg-narrow .flow-node-sub,.flow-svg-narrow .flow-edge-chip text{font-size:20px}
@keyframes flow-dash{to{stroke-dashoffset:-30}}
@media(max-width:1023px){.flow-ready .flow-map{padding-bottom:calc(var(--flow-controls-height,70px) + 24px)}.flow-ready .flow-svg-narrow{margin-bottom:24px}.flow-sources article{scroll-margin-bottom:calc(var(--flow-controls-height,70px) + 20px)}}
@media(prefers-reduced-motion:reduce){.flow-ready .flow-edges>g.is-active .flow-line{animation:none!important;stroke-dasharray:none}.flow-ready .flow-overlays>g.is-current .flow-packet{display:none}}
.flow-resource-note{padding:14px;border-left:3px solid #638154;background:#f1f5eb;border-radius:0 6px 6px 0;margin:15px 0}.flow-resource-note h4{font-size:14px;line-height:1.5;margin:0 0 8px}.flow-resource-note p,.flow-resource-note a{font-size:12px;color:#46583d}.flow-resource-note a{text-decoration:underline}.flow-documents{margin-top:24px}.flow-documents>h3{font-size:23px;line-height:1.3}.flow-documents article h4{font-size:16px;line-height:1.5;margin:0 0 12px}
.flow-ready .flow-overlays .flow-edge-chip{display:none}.flow-ready .flow-overlays>.is-current .flow-edge-chip{display:block}.flow-ready .flow-edges>g.is-active .flow-line{stroke-dasharray:none;stroke-opacity:.65}.flow-ready .flow-edges>g.is-current .flow-line{stroke-dasharray:9 6;stroke-opacity:1}
.flow-ready[data-route-paused=true] .flow-overlays>g.is-current .flow-packet{display:none}
.flow-ready .flow-map-heading h2{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
#flow-edge-list{display:flex;flex-wrap:wrap;gap:4px;list-style:none;padding:0;margin:0}#flow-edge-list button{font-size:11px;line-height:1.4;padding:5px 7px;border-radius:4px;border:1px solid #b9c9ad;background:white;color:#344c30;min-height:28px}#flow-edge-list button[aria-pressed=true]{color:white;background:#34583e;border-color:#34583e}
@media(prefers-reduced-motion:reduce){.flow-ready .flow-edges>g.is-current .flow-line{stroke-dasharray:none}}
