/* BPMN-style swimlane (includes/visuals/swimlane.php) */
.sw { min-width: 0; }
.sw-svg { max-width: 1240px; margin-inline: auto; }

/* lanes */
.sw-lane { fill: var(--paper); }
.section--paper .sw-lane { fill: var(--white); }
.sw-lane--auto, .section--paper .sw-lane--auto { fill: var(--mint); }
.sw-lane-h { fill: var(--forest); }
.sw-lane-h--auto { fill: var(--forest-2); }
.sw-lane-t { fill: var(--white); font-size: 16px; font-weight: 700; letter-spacing: .02em; }
.sw-lane-t--auto { fill: var(--green); }
.sw-sep { stroke: var(--line); stroke-width: 1.5; }
.sw-frame { fill: none; stroke: var(--line); stroke-width: 1.5; }

/* flows */
.sw-seq { fill: none; stroke: var(--forest); stroke-width: 2; stroke-linejoin: round; }
.sw-msg { fill: none; stroke: #7d8a80; stroke-width: 2; stroke-dasharray: 6 6; stroke-linejoin: round; }
.sw-arr { fill: var(--forest); }
.sw-arr-m { stroke: #7d8a80; stroke-width: 1.8; stroke-linejoin: round; }
.sw-flow-t { fill: var(--ink-2); font-size: 16px; font-style: italic; }

/* nodes */
.sw-task { stroke-width: 2; }
.sw-node--auto .sw-task { fill: var(--green); stroke: var(--green-2); }
.sw-node--human .sw-task { fill: var(--white); stroke: var(--forest); }
.sw-task-t { fill: var(--forest); font-size: 16.5px; font-weight: 600; }
.sw-gw { fill: var(--white); stroke: var(--forest); stroke-width: 2.5; stroke-linejoin: round; }
.sw-gw-x { stroke: var(--forest); stroke-width: 2.5; stroke-linecap: round; }
.sw-ev { fill: var(--white); stroke: var(--forest); stroke-width: 2; }
.sw-ev--end { stroke-width: 5; }
.sw-ev-in { fill: none; stroke: var(--forest); stroke-width: 1.2; }
.sw-env { fill: none; stroke: var(--forest); stroke-width: 1.5; stroke-linejoin: round; }
.sw-ev-t { fill: var(--forest); font-size: 16px; font-weight: 600; }
.sw-node--decision .sw-ev-t { font-weight: 700; }
.sw-token { fill: var(--forest); stroke: var(--green); stroke-width: 4; transform: translate(100px, 200px); }

/* legend */
.sw-legend { list-style: none; margin: 18px 0 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 26px; font-size: 14px; color: var(--ink-2); }
.sw-legend li { display: inline-flex; align-items: center; gap: 8px; }
.sw-legend svg { width: 26px; height: 17px; flex: none; overflow: visible; }
.sw-k-auto { fill: var(--green); stroke: var(--green-2); stroke-width: 2; }
.sw-k-human { fill: var(--white); stroke: var(--forest); stroke-width: 2; }
.sw-k-gw { fill: var(--white); stroke: var(--forest); stroke-width: 2; }
.sw-k-msg { stroke: #7d8a80; stroke-width: 2; stroke-dasharray: 5 4; }
.sw-k-token { fill: var(--forest); stroke: var(--green); stroke-width: 3; }

/* list by lane: phones only (kept for screen readers on wide screens) */
.sw-l-t { margin: 0; font-family: var(--font-sans); font-size: 13px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--forest); }
.sw-l-items { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 8px; }
.sw-it { display: grid; grid-template-columns: 26px minmax(0, 1fr); gap: 4px 10px; align-items: start; padding: 11px 12px; border-radius: 10px; background: var(--white); border: 1.5px solid var(--forest); }
.sw-it-n { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: var(--forest); color: var(--white); font-size: 12.5px; font-weight: 700; }
.sw-it-n:empty { background: none; border: 1.5px dashed #7d8a80; }
.sw-it-b { display: grid; gap: 2px; min-width: 0; padding-top: 2px; }
.sw-it-t { font-size: 15px; font-weight: 600; line-height: 1.35; color: var(--forest); }
.sw-it-note { font-size: 13px; line-height: 1.4; color: var(--ink-2); }
.sw-it-k { grid-column: 2; justify-self: start; padding: 2px 8px; border-radius: 999px; font-size: 11.5px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; background: var(--paper); color: var(--ink-2); }
.sw-it--auto { background: var(--green); border-color: var(--green-2); }
.sw-it--auto .sw-it-k { background: var(--forest); color: var(--green); }
.sw-it--decision .sw-it-n { border-radius: 0; clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); width: 30px; height: 30px; margin: -2px 0 0 -2px; }
.sw-it--decision .sw-it-k { background: var(--forest); color: var(--white); }
.sw-it--start, .sw-it--msg, .sw-it--end { border-style: dashed; border-color: #7d8a80; }

/* before / after */
.sw-cmp { margin-top: 34px; padding-top: 24px; border-top: 1px solid var(--line); }
.sw-cmp .vz-label { margin: 0 0 14px; }
.sw-cmp-rows { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.sw-cmp-row { display: grid; grid-template-columns: 70px auto minmax(0, 1fr); gap: 8px 18px; align-items: center; }
.sw-cmp-k { font-size: 14px; font-weight: 700; color: var(--forest); }
.sw-blocks { display: flex; gap: 5px; }
.sw-b { display: block; width: 22px; height: 22px; border-radius: 5px; }
.sw-b--hand { background: var(--white); border: 2px solid var(--forest); }
.section--white .sw-b--hand { background: var(--paper); }
.sw-b--auto { background: var(--green); border: 2px solid var(--green-2); }
.sw-cmp-v { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
.sw-cmp-n { font-family: var(--font-serif); font-size: 30px; line-height: 1; color: var(--forest); font-variant-numeric: tabular-nums; }
.sw-cmp-t { font-size: 14.5px; line-height: 1.4; color: var(--ink-2); }

@media (min-width: 900px) {
  .sw-list { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
}
@media (max-width: 899px) {
  .sw-draw { display: none; }
  .sw-list { display: grid; grid-template-columns: minmax(0, 1fr); gap: 22px; }
  .sw-l { padding-left: 14px; border-left: 3px solid var(--line); }
  .sw-l--auto { border-left-color: var(--green-2); }
  .sw-cmp-row { grid-template-columns: 54px minmax(0, 1fr); }
  .sw-cmp-v { grid-column: 2; }
  .sw-b { width: 18px; height: 18px; }
  .sw-blocks { gap: 4px; }
}
@media (min-width: 600px) and (max-width: 899px) { .sw-list { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px 24px; } }

/* animation: lanes, then flows, then the nodes one after the other; afterwards a token runs along the
   main path (order within scale, paid on time), and the automated blocks of the comparison fill in */
.js .vz-figure .sw-flows { opacity: 0; transition: opacity .7s ease .3s; }
.js .vz-figure .sw-node { opacity: 0; transform: translateY(8px); transition: opacity .45s ease, transform .45s ease; }
.js .vz-figure .sw-token { opacity: 0; }
.js .vz-figure .sw-it { opacity: 0; transform: translateY(8px); transition: opacity .45s ease, transform .45s ease; }
.js .vz-figure .sw-b--auto { opacity: 0; transform: scale(.4); transition: opacity .3s ease, transform .3s ease; }
.js .vz-figure.is-visible .sw-flows { opacity: 1; }
.js .vz-figure.is-visible .sw-node, .js .vz-figure.is-visible .sw-it { opacity: 1; transform: none; }
.js .vz-figure.is-visible .sw-b--auto { opacity: 1; transform: none; }
.js .vz-figure.is-visible .sw-d2 { transition-delay: .15s; }
.js .vz-figure.is-visible .sw-d3 { transition-delay: .3s; }
.js .vz-figure.is-visible .sw-d4 { transition-delay: .45s; }
.js .vz-figure.is-visible .sw-d5 { transition-delay: .6s; }
.js .vz-figure.is-visible .sw-d6 { transition-delay: .75s; }
.js .vz-figure.is-visible .sw-d7 { transition-delay: .9s; }
.js .vz-figure.is-visible .sw-d8 { transition-delay: 1.05s; }
.js .vz-figure.is-visible .sw-d9 { transition-delay: 1.2s; }
.js .vz-figure.is-visible .sw-d10 { transition-delay: 1.35s; }
.js .vz-figure.is-visible .sw-it:nth-child(2) { transition-delay: .15s; }
.js .vz-figure.is-visible .sw-it:nth-child(3) { transition-delay: .3s; }
.js .vz-figure.is-visible .sw-it:nth-child(4) { transition-delay: .45s; }
.js .vz-figure.is-visible .sw-b--1 { transition-delay: 1.6s; }
.js .vz-figure.is-visible .sw-b--2 { transition-delay: 1.7s; }
.js .vz-figure.is-visible .sw-b--3 { transition-delay: 1.8s; }
.js .vz-figure.is-visible .sw-b--4 { transition-delay: 1.9s; }
.js .vz-figure.is-visible .sw-b--5 { transition-delay: 2s; }
.js .vz-figure.is-visible .sw-b--6 { transition-delay: 2.1s; }
.js .vz-figure.is-visible .sw-b--7 { transition-delay: 2.2s; }
.js .vz-figure.is-visible .sw-token { animation: sw-run 7s linear 1.8s infinite; }
@keyframes sw-run {
  0% { opacity: 0; transform: translate(100px, 65px); }
  4% { opacity: 1; }
  16% { transform: translate(100px, 325px); }
  84% { opacity: 1; transform: translate(1080px, 325px); }
  88%, 100% { opacity: 0; transform: translate(1080px, 325px); }
}
