/* PROTOTYPE, throwaway: prototype-voyage.js */
.vy{position:relative;grid-column:1;background:var(--nv-page)}
.vy-pin{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;background:var(--nv-sky)}
.vy-svg{position:absolute;inset:0;width:100%;height:100%;display:block}
.vy-intro{position:absolute;inset:0;display:grid;place-content:center;text-align:center;pointer-events:none;padding:16px}
.vy-intro h2,.vy-step0 h2{font-size:var(--nv-h1);font-weight:800;letter-spacing:-.03em;color:var(--nv-ink);margin:0;line-height:1.05}
.vy-intro p,.vy-step0 p{color:var(--nv-ink-2);font-weight:600;margin:12px 0 0}
.vy-card{background:#fff;border-radius:var(--nv-r-card);box-shadow:var(--nv-shadow-hi);padding:var(--nv-pad);max-width:420px}
.vy-card h3{font-size:var(--nv-h2);font-weight:800;letter-spacing:-.02em;color:var(--nv-ink);margin:6px 0 8px;line-height:1.15}
.vy-card p{color:var(--nv-ink-2);margin:0 0 16px;line-height:1.5}
.vy-k{display:inline-block;font-size:var(--nv-tiny);font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--nv-teal-ink);background:var(--nv-teal-soft);padding:4px 10px;border-radius:var(--nv-r-pill)}
.vy-a .vy-card{position:absolute;left:max(16px,calc(50% - 560px));top:50%;margin-top:-140px;opacity:0;transition:none}
@media(max-width:699px){.vy-a .vy-card{left:16px;right:16px;top:auto;bottom:144px;margin:0;max-width:none}}
.vy-b .vy-sheet{position:absolute;left:50%;bottom:24px;translate:-50% 0;width:min(100% - 32px,760px);max-width:none;display:grid;grid-template-columns:1fr auto;gap:4px 24px;align-items:end;opacity:0}
.vy-b .vy-sheet>*{grid-column:1}.vy-b .vy-sheet .nv-btn{grid-column:2;grid-row:1/4}
@media(max-width:699px){.vy-b .vy-sheet{display:block;top:64px;bottom:auto}.vy-step{display:none}}
.vy-step{position:absolute;top:84px;right:16px;font-weight:700;font-size:var(--nv-small);color:var(--nv-ink);background:rgba(255,255,255,.85);padding:6px 12px;border-radius:var(--nv-r-pill)}
.vy-c{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);max-width:var(--nv-max);margin:0 auto;padding:0 var(--nv-pad)}
.vy-map{grid-column:2;grid-row:1;position:sticky;top:0;height:100vh;height:100svh;display:grid;place-items:center}
.vy-map svg{width:100%;max-height:92vh;border-radius:var(--nv-r-card);box-shadow:var(--nv-shadow)}
.vy-steps{grid-column:1;grid-row:1;padding:30vh 0 40vh}
.vy-step0{min-height:70vh}.vy-step0 h2{text-align:left}
.vy-c .vy-card{margin:0 0 70vh;opacity:.35;transition:opacity .3s,transform .3s}.vy-c .vy-card.is-on{opacity:1;transform:translateX(8px)}
.vy-leg,.vy-leg-on{fill:none;stroke-width:6;stroke-linecap:round}.vy-leg{stroke:#c4b8a0;stroke-dasharray:2 12}.vy-leg.is-sea{stroke:#fff;stroke-opacity:.6}
.vy-leg-on{stroke:var(--nv-ink)}.vy-leg-on.is-sea{stroke:#fff;stroke-width:7}
@media(max-width:699px){.vy-c{display:block;padding:0}.vy-map{height:52svh;z-index:3;background:var(--nv-page);padding:8px 16px}
  .vy-map svg{max-height:100%;height:100%}.vy-steps{position:relative;z-index:1;padding:10vh 16px 40vh}.vy-step0{min-height:50vh}.vy-c .vy-card{margin-bottom:35vh;opacity:.6}}
.vy-bar{position:fixed;left:50%;bottom:calc(8px + env(safe-area-inset-bottom));translate:-50% 0;z-index:99;display:flex;align-items:center;gap:4px;
  background:#111;color:#fff;border-radius:999px;padding:4px;box-shadow:0 8px 24px rgba(0,0,0,.35);font:600 14px/1 system-ui,sans-serif}
@media(min-width:700px){.vy-bar{bottom:20px}}
.vy-bar button{all:unset;cursor:pointer;width:40px;height:40px;display:grid;place-items:center;border-radius:999px;font-size:18px}
.vy-bar button:hover,.vy-bar button:focus-visible{background:#333}.vy-bar span{padding:0 10px;white-space:nowrap}
.vy-a>.vy-tall,.vy-a.vy-tall{height:820vh}.vy-ch{height:300vh}
.vy-intro--top{place-content:start center;padding-top:18vh}

.vd{position:relative;height:1100vh;background:linear-gradient(#e3f1f8,#f4f9fc 4%)}
.vd-world{position:absolute;inset:0;overflow:hidden}
.vd-land{position:absolute;inset:0;width:100%;height:100%}
.vd-world>i{position:absolute;left:calc(var(--x) * 100%);top:calc(var(--u) * 100%);translate:-50% -100%}
.vd-house{width:34px;height:30px;background:#fbf6ec;box-shadow:inset 0 -2px 0 #e6d8bc}
.vd-house::before{content:"";position:absolute;left:-4px;right:-4px;bottom:100%;height:14px;background:#d9774a;clip-path:polygon(50% 0,100% 100%,0 100%)}
.vd-tree{width:46px;height:46px;border-radius:50%;background:radial-gradient(circle at 65% 60%,#5d8a4b 45%,#6f9a5a 46%)}
.vd-s{position:absolute;left:0;top:0;overflow:visible;transform-origin:0 0;will-change:transform}
.vd-sky{position:absolute;inset:0 0 auto;height:100vh;display:grid;place-content:start center;padding-top:18vh;text-align:center;pointer-events:none}
.vd-sky h2{font-size:var(--nv-h1);font-weight:800;letter-spacing:-.03em;color:var(--nv-ink);margin:0;line-height:1.05}
.vd-sky p{color:var(--nv-ink-2);font-weight:600;margin:12px 0 0}
.vd-leg{position:absolute;left:max(16px,calc(50% - 560px));width:min(400px,calc(100% - 32px))}
.vd-leg0{top:27%;height:17%}.vd-leg1{top:60%;height:16%}.vd-leg2{top:82%;height:18%}
.vd-leg .vy-card{position:sticky;top:30vh}
@media(max-width:699px){.vd-leg .vy-card{top:calc(100svh - 330px)}.vd-tree{width:30px;height:30px}.vd-house{width:24px;height:22px}}
.ve.vy-tall{height:1000vh}
.ve-c{position:absolute;inset:0;width:100%;height:100%;display:block}
.ve .vy-card{position:absolute;left:max(16px,calc(50% - 560px));top:50%;margin-top:-140px;opacity:0}
@media(max-width:699px){.ve .vy-card{left:16px;right:16px;top:auto;bottom:144px;margin:0;max-width:none}}
.ve-src{position:absolute;top:80px;right:16px;font:700 15px/1 ui-monospace,monospace;background:#111;color:#fff;padding:8px 12px;border-radius:999px;opacity:.9}
.vy-a.vy-tall{height:1300vh}
.ve-tag{position:absolute;right:16px;bottom:20px;width:min(340px,calc(100% - 32px));background:rgba(17,17,17,.88);color:#fff;border-radius:14px;padding:10px;font:500 13px/1.35 system-ui;z-index:5}
.ve-tag textarea{width:100%;box-sizing:border-box;border-radius:8px;border:0;padding:8px;font:inherit;resize:vertical}
.ve-tag div{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.ve-tag button{font:600 12px system-ui;border:0;border-radius:8px;padding:7px 10px;cursor:pointer;background:#fff;color:#111}
.ve-tag button[type=submit]{background:#e0703a;color:#fff}.ve-tag ol{margin:8px 0 0;padding-left:20px;max-height:22vh;overflow:auto}.ve-tag a{color:#9fe0f2}
@media(max-width:699px){.ve-tag{bottom:auto;top:120px}.ve .vy-card{bottom:84px}}

/* E story copy: chapter cards with changing lines, intro, end card */
.ve.vy-tall{height:1130vh}
.ve .ve-ch{position:absolute;left:max(16px,calc(50% - 560px));top:50%;translate:0 -50%;margin:0;opacity:0;width:min(420px,calc(100% - 32px))}
.ve-lines{display:grid}.ve-lines h3{grid-area:1/1;opacity:0;transition:opacity .18s}.ve-lines h3.is-on{opacity:1}
.ve-dots{display:flex;gap:6px;list-style:none;padding:0;margin:4px 0 16px}.ve-dots li{width:18px;height:4px;border-radius:2px;background:var(--nv-teal-soft)}.ve-dots li.is-on{background:var(--nv-teal)}
@media(max-width:699px){.ve .ve-ch{top:auto;bottom:84px;translate:none;left:16px;right:16px;width:auto;max-width:none}}
@media(max-width:699px){.ve-tag{top:112px;bottom:auto;right:16px;left:auto;width:auto;max-width:calc(100% - 32px);padding:6px}
  .ve-tag:not(.is-open) textarea,.ve-tag:not(.is-open) ol,.ve-tag:not(.is-open) .ve-copy,.ve-tag:not(.is-open) .ve-clear{display:none}.ve-tag:not(.is-open) div{margin:0}
  .ve-tag.is-open{left:16px;bottom:auto;top:120px}
  .ve .ve-ch{bottom:calc(140px + env(safe-area-inset-bottom))}.ve-src{font-size:11px;top:72px}}

/* animated.nautivia.eu: the film is the home page; the old hero and product cards step aside, everything after stays */
/* recap under the film (Gal, 4 Oct): today's three choices with the live card, what is behind each choice, the FAQ, then the rest */
/* value first (hero 1, choices 2, find 3), then Learn more, the story, the FAQ, the boat band, the guides */
@media(min-width:700px){.nv-anim .vy-learn{grid-row:2;grid-column:1}.nv-anim .vy{grid-row:3}.nv-anim .hm-after{grid-row:4}
  .nv-anim .vy-faq{grid-row:5;grid-column:1;justify-self:center;width:var(--cw)}.nv-anim .hm-band{grid-row:6}.nv-anim .hm-plan{grid-row:7}}
/* animated mode has no variant switcher: cards sit just above the feedback pill (phone) */
@media(max-width:699px){.nv-anim .ve .ve-ch{bottom:calc(124px + env(safe-area-inset-bottom))}
  .nv-anim .ve-fb{left:16px;right:auto;bottom:calc(68px + env(safe-area-inset-bottom))}.nv-anim .ve-fb-o{padding:10px 14px}
  .ve-lv{display:flex;flex-direction:column;overflow:hidden}.ve-lv-cam{flex:1 1 auto;min-height:0;max-height:none}.ve-lv h4{flex:none}}
/* the consent bar comes first; feedback waits until it is answered */
body:has(#nv-cc) .ve-fb{display:none}

.ve-lv{position:absolute;right:max(16px,calc(50% - 560px));top:96px;width:min(360px,calc(100% - 32px));background:#fff;border-radius:var(--nv-r-card);box-shadow:var(--nv-shadow-hi);padding:16px 18px;opacity:0;z-index:2}
.ve-lv h4{margin:0 0 10px;font-size:var(--nv-small);font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--nv-teal-ink);display:flex;justify-content:space-between;gap:8px}
.ve-lv h4 small{font-weight:600;text-transform:none;letter-spacing:0;color:var(--nv-ink-2)}
.ve-lv-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-top:1px solid var(--nv-line);color:var(--nv-ink);text-decoration:none;font-weight:600}
.ve-lv-row b{font-weight:700;text-align:right}.ve-lv-s{display:inline-flex;align-items:center;gap:6px}
.ve-lv-cam{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border-radius:10px;background:var(--nv-sky);margin-bottom:6px}
.ve-lv-big{font-size:var(--nv-h2);font-weight:800;color:var(--nv-ink);margin:0}.ve-lv-big small{font-size:var(--nv-small);font-weight:700}
.ve-lv-n{margin:4px 0 0;color:var(--nv-ink-2);font-size:var(--nv-small)}
.ve-lv-two{display:grid;grid-template-columns:1fr 1fr;gap:12px}.ve-lv-two h5{margin:0 0 6px;font-size:var(--nv-small);color:var(--nv-ink-2)}
.ve-lv-two ul{list-style:none;margin:0;padding:0}.ve-lv-two li{padding:5px 0;border-top:1px solid var(--nv-line);font-size:var(--nv-small);color:var(--nv-ink-2)}.ve-lv-two li b{color:var(--nv-ink);font-size:var(--nv-body)}
.ve-lv-more{display:inline-flex;align-items:center;gap:6px;margin-top:10px;font-weight:700;color:var(--nv-teal-ink);font-size:var(--nv-small)}.ve-lv-more svg,.ve-lv-pay svg{width:16px;height:16px}
.ve-lv-pay{margin-top:12px;width:100%;justify-content:center}
@media(max-width:699px){.ve-lv{top:64px;left:16px;right:16px;width:auto;padding:12px 14px}.ve-lv-cam{max-height:150px}.ve-lv-big{font-size:var(--nv-h3,22px)}}

.ve-fb{position:fixed;right:16px;bottom:calc(20px + env(safe-area-inset-bottom));z-index:98;font-family:var(--nv-font)}
@media(max-width:699px){.ve-fb{bottom:calc(76px + env(safe-area-inset-bottom))}}
.ve-fb-o{font:700 var(--nv-small)/1 var(--nv-font);background:var(--nv-ink);color:#fff;border:0;border-radius:var(--nv-r-pill);padding:12px 16px;cursor:pointer;box-shadow:var(--nv-shadow-hi)}
.ve-fb-p{display:none;width:min(320px,calc(100vw - 32px));background:#fff;border-radius:var(--nv-r-card);box-shadow:var(--nv-shadow-hi);padding:16px}
.ve-fb.is-open .ve-fb-p{display:block}.ve-fb.is-open .ve-fb-o{display:none}
.ve-fb-p p{margin:0 0 10px;font-weight:700;color:var(--nv-ink)}
.ve-fb-r{display:flex;gap:6px;margin-bottom:10px}.ve-fb-r input{position:absolute;opacity:0}
.ve-fb-r span{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:var(--nv-teal-soft);color:var(--nv-teal-ink);font-weight:800;cursor:pointer}
.ve-fb-r input:checked+span{background:var(--nv-teal);color:#fff}.ve-fb-r input:focus-visible+span{outline:2px solid var(--nv-ink)}
.ve-fb-p textarea{width:100%;box-sizing:border-box;border:1px solid var(--nv-line);border-radius:10px;padding:8px;font:inherit;resize:vertical}
.ve-fb-a{display:flex;gap:8px;margin-top:10px;align-items:center}.ve-fb-x{background:none;border:0;color:var(--nv-ink-2);font-weight:700;cursor:pointer}

.ve-at-hero .ve-fb{display:none}
@media(max-width:699px){.nv-anim .ve-lv{top:calc(12px + env(safe-area-inset-top))}}
/* short phones (SE and smaller): compact card and panels so the camera and the pay button keep their room */
@media(max-width:699px) and (max-height:740px){
  .nv-anim .ve .ve-ch{padding:12px 14px}
  .ve-ch h3{font-size:19px;margin:4px 0 6px}.ve-ch .vy-k{font-size:10.5px;padding:3px 8px}
  .ve-dots{margin:2px 0 10px}.ve-ch .nv-btn{min-height:40px;padding-block:8px}
  .ve-lv{padding:10px 12px}.ve-lv h4{margin-bottom:6px;font-size:11px}.ve-lv-row{padding:5px 0;font-size:14px}
  .ve-lv-two li{padding:3px 0;font-size:12px}.ve-lv-two li b{font-size:14px}.ve-lv-two h5{font-size:11.5px;margin-bottom:3px}
  .ve-lv-more{margin-top:6px;font-size:12.5px}.ve-lv-pay{margin-top:8px;min-height:40px}
  }

/* FAQ in the recap */
.vy-faq{margin:clamp(28px,5vh,48px) auto 0;max-width:820px}
.vy-faq h2{margin:0 0 12px;font-size:clamp(20px,5.4vw,26px);font-weight:800;letter-spacing:-.02em;color:var(--nv-ink)}
.vy-faq__q{background:#fff;border-radius:var(--nv-r-sm);box-shadow:var(--nv-shadow);margin:0 0 8px;padding:0 16px}
.vy-faq__q summary{cursor:pointer;padding:14px 0;font-weight:700;color:var(--nv-ink);list-style-position:outside}
.vy-faq__q p{margin:0 0 14px;color:var(--nv-ink-2);line-height:1.55}
.vy-faq__more{display:inline-block;margin-top:6px;font-weight:700;color:var(--nv-teal-ink)}
@media(max-width:699px){.vy-faq{padding:0 16px}}

/* ---- five phone layouts (html.vm1..vm5); each keeps the film visible ---- */
.ve-vm{position:fixed;top:50%;right:0;translate:0 -50%;flex-direction:column;opacity:.75;z-index:99;display:flex;gap:2px;background:rgba(17,17,17,.85);border-radius:999px;padding:3px}
.ve-vm a{color:#fff;text-decoration:none;font:700 12px/1 system-ui;width:24px;height:24px;display:grid;place-items:center;border-radius:999px}
.ve-vm a[aria-current]{background:#e0703a}
@media(max-width:699px){
  /* shared compact card for every option */
  [class*="vm"] .ve .ve-ch{padding:12px 14px}
  [class*="vm"] .ve-ch h3{font-size:clamp(17px,5vw,20px);margin:4px 0 8px}
  [class*="vm"] .ve-ch .nv-btn{min-height:40px;padding-block:8px}

  /* 1 · caption on top, live at the bottom: the words sit in the sky, the data near the thumb */
  .vm1 .ve .ve-ch{top:calc(10px + env(safe-area-inset-top));bottom:auto}
  .vm1 .ve-dots{display:none}.vm1 .ve-ch .vy-k{display:none}
  .vm1 .ve-ch{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px}.vm1 .ve-ch .nv-btn{font-size:0;gap:0;width:44px;padding:0;justify-content:center}.vm1 .ve-ch .nv-btn svg{width:20px;height:20px}
  .vm1 .ve-ch h3{margin:0}
  .vm1 .ve-lv{top:auto;bottom:calc(118px + env(safe-area-inset-bottom));max-height:36svh}
  .vm1 .ve-lv-cam{max-height:18svh}

  /* 2 · split: film in the top half, words and data on a sheet below, nothing over the picture */
  .vm2{--split:52svh}.vm2 .ve-c{height:var(--split)}
  .vm2 .vy-pin::after{content:"";position:absolute;left:0;right:0;top:calc(var(--split) - 16px);bottom:0;background:var(--nv-page);border-radius:18px 18px 0 0;z-index:1}
  .vm2 .ve .ve-ch{top:auto;bottom:calc(var(--sp-tabs,calc(58px + env(safe-area-inset-bottom))) + 6px);box-shadow:none;z-index:2}
  .vm2 .ve-lv{top:calc(var(--split) - 4px);box-shadow:none;background:transparent;padding:6px 16px 0;z-index:2}
  .vm2 .ve-lv-cam{display:none}.vm2 .ve-fb{top:calc(10px + env(safe-area-inset-top));bottom:auto;left:auto;right:12px}
  .vm2 .ve-fb-o{background:rgba(17,17,17,.7)}

  /* 3 · subtitles: the line as cinema text on a gradient, live data as a chip you tap */
  .vm3 .ve .ve-ch{background:none;box-shadow:none;left:0;right:0;bottom:var(--sp-tabs,calc(58px + env(safe-area-inset-bottom)));padding:60px 16px 14px;border-radius:0;
    background:linear-gradient(transparent,rgba(5,16,26,.93) 32%)} /* Gal, 5 Oct: A2, the darker shade */
  .vm3 .ve-ch h3{color:#fff}.vm3 .ve-dots{display:none}
  .vm3 .ve-ch .vy-k{background:rgba(255,255,255,.18);color:#fff}
  .vm3 .ve-ch .nv-btn{background:#fff;color:var(--nv-ink)}

  /* 4 · one sheet: words and a live tab dock to the bottom edge, the film owns everything above */
  .vm4 .ve .ve-ch{left:0;right:0;bottom:var(--sp-tabs,calc(58px + env(safe-area-inset-bottom)));border-radius:18px 18px 0 0;padding-top:18px}
  .vm4 .ve-ch::before{content:"";position:absolute;top:7px;left:50%;translate:-50% 0;width:36px;height:4px;border-radius:2px;background:var(--nv-line)}
  .vm4 .ve-lv{top:auto;left:12px;right:12px;cursor:pointer;max-height:46svh}
  .vm4 .ve-lv:not(.is-open){right:auto;padding:8px 12px;border-radius:999px}.vm4 .ve-lv:not(.is-open) h4{margin:0;font-size:11px}
  .vm4 .ve-lv:not(.is-open) h4::after{content:"▴";margin-left:6px}
  .vm4 .ve-fb{top:calc(10px + env(safe-area-inset-top));bottom:auto;left:auto;right:12px}.vm4 .ve-fb-o{padding:8px 12px;font-size:12px}

  /* 5 · letterbox: the whole painting in a 16:9 band, words above it, live data below; nothing touches the picture */
  .vm5 .vy-pin{background:var(--nv-page)}
  .vm5 .ve-c{top:24svh;height:56.25vw}
  .vm5 .ve .ve-ch{top:calc(8px + env(safe-area-inset-top));bottom:auto;box-shadow:none;background:transparent;max-height:calc(24svh - 12px);overflow:hidden}
  .vm5 .ve-ch{display:grid;grid-template-columns:1fr auto;align-items:end;column-gap:10px}.vm5 .ve-ch .vy-k,.vm5 .ve-ch .ve-lines{grid-column:1}.vm5 .ve-dots{display:none}
  .vm5 .ve-ch .nv-btn{grid-column:2;grid-row:1/3;font-size:0;width:44px;padding:0;justify-content:center}.vm5 .ve-ch .nv-btn svg{width:20px;height:20px}
  .vm5 .ve-lv{top:calc(24svh + 56.25vw + 8px);box-shadow:none;max-height:calc(76svh - 56.25vw - 16px - var(--sp-tabs,calc(58px + env(safe-area-inset-bottom))))}
  .vm5 .ve-fb{top:calc(24svh + 8px);bottom:auto;left:auto;right:8px}.vm5 .ve-fb-o{padding:7px 11px;font-size:12px;background:rgba(17,17,17,.7)}
  .vm5 .ve-lv-cam{max-height:16svh}
}
@media(max-width:699px) and (max-height:700px){.vm2{--split:42svh}}
@media(max-width:699px){.vm2 .ve-lv-more,.vm2 .ve-lv-pay{display:none}.vm2 .ve-lv h4{margin-bottom:4px}.vm2 .ve-lv-two li{padding:2px 0}.vm2 .ve-lv-row{padding:4px 0}}
@media(max-width:699px) and (max-height:600px){.vm2 .ve-lv-two h5{display:none}.vm2 .ve-lv-two li span{display:none}}
/* under the film the live card is no longer on the first screen: live.js's first-screen fitting must not cut its rows */

/* a new beat must be noticed on a big screen (Gal, 4 Oct): the line rises in, the card pulses, the panel slides in */
.ve-lines h3.is-on{animation:veRise .3s cubic-bezier(.2,.8,.2,1)}
@keyframes veRise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.ve-ch.ve-bump{animation:veBump .5s ease-out}
@keyframes veBump{0%{box-shadow:var(--nv-shadow-hi),0 0 0 0 rgba(31,138,160,.55)}100%{box-shadow:var(--nv-shadow-hi),0 0 0 18px rgba(31,138,160,0)}}
.ve-lv.ve-in{animation:veSlide .3s cubic-bezier(.2,.8,.2,1)}
@keyframes veSlide{from{transform:translateX(24px);filter:blur(2px)}to{transform:none;filter:none}}
.ve-dots li{transition:background .3s,width .3s}.ve-dots li.is-on:last-of-type,.ve-dots li.is-on:not(:has(+ .is-on)){width:30px}
.ve-lv-chips{list-style:none;margin:0 0 6px;padding:0;display:flex;flex-wrap:wrap;gap:6px}.ve-lv-chips li{background:var(--nv-teal-soft);color:var(--nv-teal-ink);font-weight:700;font-size:var(--nv-small);padding:6px 10px;border-radius:var(--nv-r-pill)}
.ve-lv-stops{display:flex;flex-wrap:wrap;gap:4px 0;margin:8px 0 0;padding:0;list-style:none;font-size:var(--nv-small);color:var(--nv-ink-2)}
.ve-lv-stops li:not(:last-child)::after{content:"→";margin:0 6px;color:var(--nv-teal)}
@media(prefers-reduced-motion:reduce){.ve-lines h3.is-on,.ve-ch.ve-bump,.ve-lv.ve-in{animation:none}}
.vm3 .ve-ch.ve-bump{animation:none}

/* 6 · subtitles on top (Gal: the thumb scrolls from the bottom, so nothing tappable lives there): the line and the CTA in the sky, the live chip under them */
@media(max-width:699px){
  .vm6 .ve .ve-ch{top:0;bottom:auto;left:0;right:0;border-radius:0;box-shadow:none;padding:calc(12px + env(safe-area-inset-top)) 16px 12px;
    background:rgba(10,30,45,.72)}
  .vm6 .ve .ve-ch::after{content:"";position:absolute;left:0;right:0;top:100%;height:36px;background:linear-gradient(rgba(10,30,45,.72),transparent);pointer-events:none}
  .vm6 .ve-ch h3{color:#fff;text-shadow:0 1px 8px rgba(0,0,0,.4)}.vm6 .ve-dots{display:none}
  .vm6 .ve-ch .vy-k{background:rgba(255,255,255,.18);color:#fff}
  .vm6 .ve-ch .nv-btn{background:#fff;color:var(--nv-ink);min-height:36px;padding:6px 14px;font-size:14px}
  .vm6 .ve-ch.ve-bump{animation:none}
}

/* Gal, 4 Oct: the message lives at one edge, the live example at the other. 3 = message bottom / example top, 6 = flipped.
   The feedback pill sits mid-right, clear of both. */
@media(max-width:699px){
  .vm3 .ve-lv,.vm6 .ve-lv{left:12px;right:12px;width:auto}
  .vm3 .ve-lv{top:calc(12px + env(safe-area-inset-top));bottom:auto}
  .vm6 .ve-lv{top:auto;bottom:calc(var(--sp-tabs,58px) + 12px)}
  .vm3 .ve-fb,.vm6 .ve-fb{bottom:auto;top:calc(12px + env(safe-area-inset-top));left:10px;right:auto}.vm6 .ve-fb{top:auto;bottom:calc(var(--sp-tabs,58px) + 12px)}.vm3 .ve-fb-o,.vm6 .ve-fb-o{padding:7px 11px;font-size:12px;background:rgba(17,17,17,.7)}
}

/* stops: the snap points inside the film, live only while it fills the screen (html.ve-snap) */
.ve.vy-tall{position:relative}
.ve-stop{position:absolute;left:0;width:1px;height:1px;scroll-snap-align:start;scroll-snap-stop:always;pointer-events:none}
/* 100svh as a measurable px height: the one screen height of the film, steady while iOS Safari's toolbar moves */
.ve-ruler{position:fixed;left:0;top:0;width:0;height:100vh;height:100svh;visibility:hidden;pointer-events:none}
html.ve-snap{scroll-snap-type:y mandatory;scroll-padding-top:0}
.ve-top{display:flex;align-items:center;gap:10px}.ve-top .vy-k{margin-right:auto}
.ve-n{font-size:12px;font-weight:700;color:var(--nv-ink-2);font-variant-numeric:tabular-nums}
.ve-skip{font:600 12px/1 var(--nv-font);background:none;border:0;padding:6px 2px;color:var(--nv-ink-2);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
@media(max-width:699px){.vm3 .ve-n,.vm3 .ve-skip{color:rgba(255,255,255,.85)}}

/* the new opening: live proof, one Start button, a quiet "or jump to", and the first message peeking cut off at the bottom */
.ve-step{display:flex;gap:6px;margin-bottom:8px}.ve-step button{flex:1;font:700 13px/1 system-ui;padding:9px 0;border:0;border-radius:8px;background:#fff;color:#111;cursor:pointer}
.ve-step .ve-snapbtn{flex:1.4}.ve-step .ve-snapbtn[aria-pressed=true]{background:#2a9d8f;color:#fff}
.ve-act{display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px}
.ve-out{font-size:var(--nv-small);font-weight:600;color:var(--nv-ink-2);text-decoration:underline;text-underline-offset:3px}
@media(max-width:699px){.vm3 .ve-out{color:rgba(255,255,255,.9)}}
.ve-ch .ve-lines{margin-bottom:14px}
/* desktop: the message rides high, clear of the people in the film (Gal, 4 Oct) */
@media(min-width:700px){.ve .ve-ch{top:88px;translate:none}}
/* handoff: what follows the film rises over its last screen, as normal cards on a sheet */
/* Learn more (Gal, 6 Oct): the entry to the story, under the value page */
.vy-learn{display:flex;justify-content:center;padding:clamp(28px,6vh,56px) var(--nv-pad)}
.vy-learn__b{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:2px;min-height:48px;padding:8px 20px;border-radius:var(--nv-r-pill);font-weight:700;font-size:var(--nv-h3,18px);color:var(--nv-teal-ink)}
@media(max-width:699px){.vy-learn{padding-top:0;padding-bottom:10px}.vy-learn__b{min-height:0;padding:4px 20px;gap:0}}
.vy-learn__b:focus-visible{outline:3px solid var(--nv-teal-ink);outline-offset:2px}
.vy-learn__b svg{animation:vy-bob 1.6s ease-in-out infinite}
@keyframes vy-bob{0%,100%{transform:translateY(-3px)}50%{transform:translateY(6px)}}
@media(prefers-reduced-motion:reduce){.vy-learn__b svg{animation:none}}
/* desktop: the proof inside the message card, as an inner card (Gal, 4 Oct) */
@media(min-width:700px){
  .ve .ve-ch:has(>.ve-lv:not([hidden])){width:min(460px,calc(100% - 32px))}
  .ve-ch>.ve-lv{position:static;width:auto;opacity:1!important;box-shadow:none;background:var(--nv-sky);border-radius:16px;padding:14px 16px;margin:0 0 16px}
  .ve-ch>.ve-lv[hidden]{display:none}
  .ve-ch>.ve-lv h4{border-bottom:0}
  .ve-ch>.ve-lv .ve-lv-row{border-top-color:rgba(10,30,45,.08)}
  .ve-ch>.ve-lv .ve-lv-cam{max-height:30vh}
}
/* the painting's scroll drift is timed to the top of the page; here the page above it is the film */

/* feedback (Gal, 5 Oct): on phones one fixed place, bottom right above the tab bar, a round button that never travels */
.ve-fb-o{display:inline-flex;align-items:center;gap:8px}.ve-fb-o svg{display:none}
@media(max-width:699px){.nv-anim .ve-fb,.nv-anim.vm3 .ve-fb{top:auto;left:auto;right:12px;bottom:calc(var(--sp-tabs,58px) + 12px + env(safe-area-inset-bottom));visibility:visible}
  .nv-anim .ve-fb-o{width:46px;height:46px;padding:0;justify-content:center;border-radius:50%}.nv-anim .ve-fb-o svg{display:block}.nv-anim .ve-fb-o span{display:none}}

/* ?review=1 — frame review dock: small, top right, like the old tagger (Gal, 5 Oct: the full-width one was huge) */
.ve-rev body{overflow:hidden}.ve-rev .ve-tag,.ve-rev .ve-src,.ve-rev .ve-fb{display:none!important}
.ve-rev-bare .ve-ch,.ve-rev-bare .ve-lv,.ve-rev-bare .vy-intro,.ve-rev-bare .hm-hd,.ve-rev-bare .hm-tabs{visibility:hidden!important}
.ve-dock{position:fixed;top:calc(64px + env(safe-area-inset-top));right:8px;width:206px;z-index:200;background:rgba(10,20,30,.86);color:#fff;border-radius:12px;padding:6px;font:600 11px/1.25 system-ui;display:grid;gap:5px}
.ve-dk-at{font:700 10px/1.25 ui-monospace,monospace}
.ve-dock button{font:700 12px/1 system-ui;border:0;border-radius:7px;background:#fff;color:#111;min-height:30px;padding:0 6px;cursor:pointer}
.ve-dk-r{width:100%;height:18px;margin:0;accent-color:#e0703a}
.ve-dk-st{display:grid;grid-template-columns:repeat(5,1fr);gap:3px}.ve-dk-play{background:#2a9d8f!important;color:#fff!important}
.ve-dk-b{display:grid;grid-template-columns:1fr 1fr 1.2fr;gap:3px}.ve-dk-ui[aria-pressed=false]{background:#e0703a!important;color:#fff!important}
.ve-dk-n{display:none;gap:4px}.ve-dock.is-open .ve-dk-n{display:grid}
.ve-dk-n textarea{border:0;border-radius:7px;padding:6px;font:16px/1.3 system-ui;resize:vertical;min-height:52px}
.ve-dk-s{background:#e0703a!important;color:#fff!important}.ve-dk-ok{margin:0;color:#9fe0f2;min-height:1em}.ve-dk-ok:empty{display:none}

.ve-dk-top{display:flex;justify-content:space-between;align-items:flex-start;gap:6px}.ve-dock .ve-dk-min{min-height:22px;width:26px;padding:0;flex:none}
.ve-dk-pill{display:none}.ve-dock.is-min{width:auto;padding:0;background:none}.ve-dock.is-min>*{display:none!important}.ve-dock.is-min .ve-dk-pill{display:block!important;background:rgba(10,20,30,.86);color:#fff;min-height:34px;padding:0 12px}
@media(min-width:700px){.ve-dock{top:96px;right:16px;width:250px;padding:10px;gap:7px;font-size:12px}.ve-dk-at{font-size:11px}.ve-dock button{min-height:32px;font-size:13px}}

.ve-dk-top,.ve-dk-pill{cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}.ve-dk-top::before{content:'⠿';margin-right:4px;opacity:.6}

/* a card is as tall as the line it shows, not its chapter's longest line (the gap above the proof, 5 Oct) */
.ve-lines{position:relative}.ve-lines h3:not(.is-on){position:absolute;left:0;right:0;top:0}
.ve-lv .ve-lv-h2{margin-top:12px}

/* the end page has its own buttons where the feedback button sits; it steps aside there */
.ve-at-end .ve-fb{display:none}

/* phone options (5 Oct). The header sits over the film, so whatever lives at the top starts under it */
@media(max-width:699px){
  .nv-anim.vm3 .ve-lv{top:calc(var(--hd-h,60px) + 8px + env(safe-area-inset-top))}
  .ml-down .ve-ch>.ve-lv,.ml-up .ve-ch>.ve-lv{position:static;left:auto;right:auto;width:auto;max-height:none;opacity:1!important;box-shadow:none;margin:0 0 12px;padding:10px 12px;background:rgba(255,255,255,.96)}
  .ml-down .ve-ch>.ve-lv[hidden],.ml-up .ve-ch>.ve-lv[hidden]{display:none}
  .ml-down .ve-lv-cam,.ml-up .ve-lv-cam{max-height:120px}
  .ml-up .ve .ve-ch{top:calc(var(--hd-h,60px) + env(safe-area-inset-top));bottom:auto;padding:12px 16px 56px;background:linear-gradient(rgba(10,30,45,.72) 60%,transparent)}
  .mt-dark .ve .ve-ch{background:linear-gradient(transparent,rgba(5,16,26,.93) 32%)}
  .mt-dark.ml-up .ve .ve-ch{background:linear-gradient(rgba(5,16,26,.93) 68%,transparent)}
  .mt-dark .ve-ch h3{text-shadow:none}
  .mt-light .ve .ve-ch{background:#fff;left:10px;right:10px;bottom:calc(var(--sp-tabs,58px) + 8px);padding:16px;border-radius:20px;box-shadow:var(--nv-shadow-hi)}
  .mt-light.ml-up .ve .ve-ch{top:calc(var(--hd-h,60px) + 6px + env(safe-area-inset-top));bottom:auto;padding:16px}
  .mt-light .ve-ch h3{color:var(--nv-ink);text-shadow:none}
  .mt-light .ve-ch .vy-k{background:var(--nv-teal-soft);color:var(--nv-teal-ink)}
  .mt-light .ve-ch .nv-btn{background:var(--nv-ink);color:#fff}
  .mt-light .ve-n,.mt-light .ve-skip,.mt-light .ve-out{color:var(--nv-ink-2)}
  .mt-light .ve-ch>.ve-lv{background:var(--nv-sky,#eef6fb)}
}
@media(max-width:699px){
  .ml-down .ve .ve-ch{padding-top:28px;background:linear-gradient(transparent,rgba(10,30,45,.8) 44px)}
  .mt-dark.ml-down .ve .ve-ch{background:linear-gradient(transparent,rgba(5,16,26,.94) 44px)}
  .ml-up .ve .ve-ch{padding-bottom:30px;background:linear-gradient(rgba(10,30,45,.8) calc(100% - 30px),transparent)}
  .mt-dark.ml-up .ve .ve-ch{background:linear-gradient(rgba(5,16,26,.94) calc(100% - 30px),transparent)}
  .mt-light.ml-down .ve .ve-ch,.mt-light.ml-up .ve .ve-ch{background:#fff;padding:16px}
}

/* Back: the secondary of the pair, outlined, left of Next (5 Oct) */
.ve-prev{font:700 var(--nv-small,15px)/1 var(--nv-font);min-height:48px;padding:0 14px;border-radius:var(--nv-r);border:1.5px solid currentColor;background:transparent;color:var(--nv-teal-ink);cursor:pointer;display:inline-flex;align-items:center;gap:4px}
.ve-prev[hidden]{display:none}.ve-prev:hover{background:var(--nv-teal-soft)}
@media(max-width:699px){.vm3 .ve-prev{color:#fff;border-color:rgba(255,255,255,.7);padding:0 13px}.vm3 .ve-prev:hover{background:rgba(255,255,255,.12)}.ve-prev-t{display:none}}
/* Gal, 5 Oct night: the merged card covered the whole film on a phone. Pin it to the tab bar
   (fixed, so iOS's collapsing toolbar can't open a gap under it) and keep only the headline facts. */
@media(max-width:699px){
  html:not(.vy-story).vm3 .ve .ve-ch{position:fixed;padding-top:36px}
  html:not(.vy-story).vm3 .ve-ch h3{font-size:20px;line-height:1.2}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv{padding:6px 12px;margin-bottom:10px;border-radius:12px}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv h4{font-size:10px;margin:0 0 2px}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-h2{margin-top:6px}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-row{padding:3px 0;font-size:13px}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .nv-pill{font-size:11px;padding:2px 8px}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-big{font-size:17px;line-height:1.2}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-n,html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-more,html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-stops,
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-chips,html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-h2:has(+.ve-lv-chips){display:none}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-two .ve-lv-n{display:block;font-size:12px;margin:0}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-cam{max-height:72px;margin:2px 0 0}
  html:not(.vy-story).ml-down .ve-ch>.ve-lv .ve-lv-pay{min-height:36px;font-size:13px;margin-top:6px}
}
/* STORY opening (animated.nautivia.eu): white type on a photo, readable on any still. A dusk scrim from the top
   carries the headline; the photo stays bright below it. */
/* STORY phone strip: small live camera + a running line of the ramps, over the top of the photo */
@media(max-width:699px){
  html.vm3 .ve-lv.ve-tkp{display:flex!important;flex-direction:row!important;align-items:center;gap:10px;padding:6px;border-radius:14px;max-height:none!important;
    background:rgba(15,42,61,.62);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:#fff;box-shadow:none}
  .ve-tkp .ve-tk-cam{flex:0 0 auto;width:96px;height:54px;object-fit:cover;border-radius:9px;display:block}
  .ve-tkp .ve-tk{flex:1;overflow:hidden;white-space:nowrap;-webkit-mask:linear-gradient(90deg,transparent,#000 8px,#000 calc(100% - 16px),transparent);mask:linear-gradient(90deg,transparent,#000 8px,#000 calc(100% - 16px),transparent)}
  .ve-tkp .ve-tk-run{display:inline-block;animation:ve-tk 16s linear infinite}
  .ve-tkp .ve-tk-run span{font:600 14px/1.2 var(--nv-font);margin-right:18px}
  .ve-tkp .ve-tk-run b{font-weight:800}
  .ve-tkp .nv-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--nv-ok);margin-right:6px;vertical-align:middle}
  .ve-tkp .nv-dot[data-s=yellow]{background:var(--nv-warn,#d69e2e)}.ve-tkp .nv-dot[data-s=red]{background:var(--nv-bad,#e5533d)}.ve-tkp .nv-dot[data-s=stale]{background:#9aa9b4}
  .ve-tkp .ve-tk-a{display:flex;align-items:center;gap:10px;flex:1;min-width:0;color:inherit;text-decoration:none}
  .ve-tkp .ve-tk-tile{flex:0 0 auto;width:96px;height:54px;border-radius:9px;background:rgba(255,255,255,.14);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 4px}
  .ve-tkp .ve-tk-tile b{font:800 17px/1.1 var(--nv-font);white-space:nowrap}
  .ve-tkp .ve-tk-tile small{font:600 10px/1.2 var(--nv-font);opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
}
@keyframes ve-tk{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.ve-tkp .ve-tk-run{animation:none}}

/* STORY phone, 6 Oct (Gal watched a user: the thumb covered text at the bottom). Everything to read sits at the TOP under the
   header: eyebrow, headline and the live strip in one dark-glass block. Only the controls stay low, where the thumb is. */
@media(max-width:699px){
  html.vy-story.vm3 .ve .ve-ch{top:0;bottom:auto;left:0;right:0;width:auto;max-width:none;
    padding:calc(env(safe-area-inset-top) + 14px) 16px 26px;border-radius:0;box-shadow:none;background:linear-gradient(rgba(5,16,26,.88) calc(100% - 26px),transparent)}
  html.vy-story.vm3 .ve-ch .ve-lines{margin-bottom:8px}
  html.vy-story.vm3 .ve-ch h3{font-size:clamp(18px,5.4vw,21px);line-height:1.2;margin:6px 0 0}
  html.vy-story.vm3 .ve-ch .ve-lines h3{margin:0}
  html.vy-story.vm3 .ve-ch>.ve-lv{position:static;left:auto;right:auto;top:auto;width:auto;opacity:1!important;margin:0}
  html.vy-story.vm3 .ve-ch>.ve-lv.ve-tkp[hidden]{display:none!important}
  html.vy-story.vm3 .ve-ch>.ve-lv.ve-tkp{background:rgba(255,255,255,.12);backdrop-filter:none;-webkit-backdrop-filter:none}
  html.vy-story.vm3 .ve-tkp .ve-tk-cam,html.vy-story.vm3 .ve-tkp .ve-tk-tile{width:80px;height:45px}
  /* controls (Gal, 6 Oct): a flat strip docked to the bottom edge, not a floating pill. One button family: same 48px height,
     radius and 14px type; Back and Try it are outlined, Next is the one filled button. */
  html.vy-story.vm3{--ve-bar:calc(64px + env(safe-area-inset-bottom))}
  html.vy-story.vm3 .ve-ch .ve-act{position:fixed;left:0;right:0;bottom:0;z-index:3;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;
    padding:8px 12px calc(8px + env(safe-area-inset-bottom));border-radius:0;box-shadow:none;background:var(--nv-ink);border-top:1px solid rgba(255,255,255,.16)}
  html.vy-story.vm3:not(.ve-in) .ve-ch .ve-act{display:none}
  html.vy-story.vm3 .ve-ch .ve-act>:is(.ve-prev,.ve-next,.ve-out){box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:5px;height:48px;min-height:48px;margin:0;padding:0 14px;
    border-radius:var(--nv-r-sm);font:700 14px/1 var(--nv-font);white-space:nowrap;text-decoration:none;cursor:pointer}
  html.vy-story.vm3 .ve-ch .ve-act>:is(.ve-prev,.ve-out){background:transparent;color:#fff;border:0;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.55)}
  html.vy-story.vm3 .ve-ch .ve-act>:is(.ve-prev,.ve-out):hover{background:rgba(255,255,255,.12)}
  html.vy-story.vm3 .ve-ch .ve-act>.ve-next{background:#fff;color:var(--nv-ink);border:0;box-shadow:none}
  html.vy-story.vm3 .ve-ch .ve-prev-t{display:inline}
}

/* STORY desktop layouts (Gal, 6 Oct, chosen from the layout doc). >=700px only; phones keep their own rules above.
   The message is a caption docked at the edge the photo leaves empty (per stop, in % of the stage); the live proof is one small chip:
   stops 1, 5, 6, 7 in the corner opposite the caption, stops 2-4 pinned to the subject (placed by JS in photo coordinates). */
@media(min-width:700px){
  html.vy-story .ve .ve-ch{top:auto;bottom:4%;left:2%;right:auto;translate:none;width:max-content;max-width:max(26%,340px);padding:14px 16px;border-radius:16px;
    background:rgba(10,30,45,.66);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:none;color:#fff}
  html.vy-story .ve-ch .vy-k{background:rgba(255,255,255,.22);color:#fff}
  html.vy-story .ve-ch h3{color:#fff;font-size:clamp(19px,1.7vw,25px);margin:8px 0 0;line-height:1.15;text-shadow:none}
  html.vy-story .ve-ch .ve-lines{margin-bottom:12px}
  html.vy-story .ve-ch .ve-n,html.vy-story .ve-ch .ve-skip,html.vy-story .ve-ch .ve-out{color:rgba(255,255,255,.88)}
  html.vy-story .ve-ch .ve-top .ve-n{margin-right:auto}.ve-ch .ve-top .vy-k{margin-right:0}.ve-ch .ve-n::before{content:"· "}
  html.vy-story .ve-ch .ve-out{font-size:15px;font-weight:700}
  html.vy-story .ve-ch .ve-act{gap:8px 12px}
  html.vy-story .ve-ch .nv-btn,html.vy-story .ve-ch .ve-prev{min-height:44px;font-size:15px}
  html.vy-story .ve-ch .ve-prev{background:#fff;color:var(--nv-teal-ink);border:2px solid #b8cfd9}.ve-ch .ve-prev:hover{background:var(--nv-teal-soft)}
  .ve-ch .ve-buy{order:-1}.ve-ch .ve-buy[hidden]{display:none}.ve-ch .ve-prev{order:1}.ve-ch .ve-out{order:2}
  html.vy-story .ve-ch[data-s="2"],html.vy-story .ve-ch[data-s="3"],html.vy-story .ve-ch[data-s="4"]{background:rgba(8,24,36,.5);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
  html.vy-story .ve-ch[data-s="2"]{left:30%;bottom:3%;max-width:max(32%,340px)}
  html.vy-story .ve-ch[data-s="3"]{left:2%;bottom:4%;max-width:max(34%,360px)}
  html.vy-story .ve-ch[data-s="4"]{left:2%;bottom:4%;max-width:max(42%,400px)}
  html.vy-story .ve-ch[data-s="5"],html.vy-story .ve-ch[data-s="6"]{left:auto;right:2%;bottom:calc(4% + 60px);max-width:max(36%,360px)}
  html.vy-story .ve-ch[data-s="7"]{left:2%;bottom:3%;max-width:max(40%,380px)}

  /* the chip: a line of the live proof, nothing else. Stops 1, 5-7: sits directly above the caption, left and width taken from it by JS (Gal, 6 Oct) */
  html.vy-story .ve-lv.ve-chip{display:block;width:max-content;max-width:340px;padding:10px 14px;border-radius:16px;background:rgba(255,255,255,.88);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
    box-shadow:none;font:600 15px/1.4 var(--nv-font);color:var(--nv-ink);left:2%;right:auto;top:auto;bottom:50%;overflow:visible}
  html.vy-story .ve-chip[hidden]{display:none}
  .ve-chip a{color:inherit;text-decoration:none}.ve-chip a:hover{text-decoration:underline;text-underline-offset:3px}
  .ve-chip b{font-weight:800;color:#0b7a3e}.ve-chip b[data-s=yellow]{color:var(--nv-warn,#b7791f)}.ve-chip b[data-s=red]{color:var(--nv-bad,#c0392b)}
  .ve-lvt{display:inline-block;font:800 11px/1 var(--nv-font);letter-spacing:.1em;background:#25a25a;color:#fff;padding:3px 7px;border-radius:5px;margin-right:8px;vertical-align:2px}
  .ve-chip .nv-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#25a25a;margin-right:8px;vertical-align:middle}
  /* pinned to the subject: a pill, positioned by JS, with a leader line to the subject */
  html.vy-story .ve-lv.ve-chip[data-pin]{right:auto;border-radius:999px;padding:11px 16px;font-weight:700;font-size:16px;line-height:1;white-space:nowrap;max-width:none}
  .ve-pin{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
  .ve-pin line{stroke:#fff;stroke-width:3}.ve-pin circle{r:9;fill:#157f9c;stroke:#fff;stroke-width:3}
}
/* story navigation (Gal, 6 Oct): Return goes to the top of the page (top of every card), Skip goes down to "What is behind each choice" */
/* STORY phone, stops 2-4 (Gal, 6 Oct): the same pinned chip as desktop, in the water under the subject, with a leader to the dot */
@media(max-width:699px){
  html.vy-story.vm3 .ve-lv.ve-chip{display:block;position:absolute;right:auto;bottom:auto;width:max-content;max-width:calc(100% - 24px);padding:10px 14px;border-radius:999px;background:rgba(255,255,255,.9);
    -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:none;font:700 14px/1 var(--nv-font);color:var(--nv-ink);white-space:nowrap;overflow:visible;max-height:none!important;z-index:3}
  html.vy-story.vm3 .ve-chip[hidden]{display:none}
  .ve-chip a{color:inherit;text-decoration:none}
  .ve-chip b{font-weight:800;color:#0b7a3e}
  .ve-chip .nv-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#25a25a;margin-right:7px;vertical-align:middle}
  .ve-pin{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
  .ve-pin line{stroke:#fff;stroke-width:3}.ve-pin circle{r:9;fill:#157f9c;stroke:#fff;stroke-width:3}
}
.ve-sk{position:fixed;right:16px;bottom:calc(20px + env(safe-area-inset-bottom));z-index:97;display:none;align-items:center;gap:6px;font:700 var(--nv-small,13px)/1 var(--nv-font);min-height:40px;padding:0 16px;border-radius:var(--nv-r-pill);border:0;background:rgba(15,42,61,.78);color:#fff;cursor:pointer;box-shadow:var(--nv-shadow)}
.ve-sk:hover{background:var(--nv-ink)}.ve-sk:focus-visible{outline:3px solid #fff;outline-offset:2px}
html.ve-in .ve-sk{display:inline-flex}
html.ve-rev .ve-sk{display:none}
.ve-buys{display:none}.ve-buy-t[hidden]{display:none}
.ve-buy-t svg{width:14px;height:14px;vertical-align:-2px;margin-left:2px}
@media(max-width:699px){
  .ve-sk{right:auto;left:50%;translate:-50% 0;bottom:calc(var(--ve-bar,var(--sp-tabs,58px)) + 12px)}
  .ve-ch .ve-buy{display:none!important}
  .ve-buys{display:block}.ve-buys:not(:has(a:not([hidden]))){display:none}
  .ve-buy-t{display:inline-block;margin-top:6px;font-weight:700;font-size:14px;color:#fff;text-decoration:underline;text-underline-offset:3px}
}

/* feedback (Gal, 6 Oct): no floating button — a plain text link at the end of the page, above the footer */
.nv-anim .ve-fb,.nv-anim.vm3 .ve-fb,.ve-at-hero .ve-fb{position:static;display:block;visibility:visible;text-align:center;padding:24px 16px 32px}
.nv-anim .ve-fb-o,.ve-fb-o{width:auto;height:auto;padding:8px 4px;border-radius:0;background:none;box-shadow:none;color:var(--nv-ink-2);text-decoration:underline;text-underline-offset:3px}
.nv-anim .ve-fb-o svg{display:none}.nv-anim .ve-fb-o span{display:inline}
.ve-fb-p{margin:0 auto;text-align:left}

/* port-state dots: one dot per ramp + a quiet legend (Gal, 6 Oct) */
.ve-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ve-pd-w{display:flex;flex-direction:column;gap:3px;min-width:0}
.ve-pd{display:flex;flex-wrap:nowrap;gap:10px;white-space:nowrap}
.ve-pd a{color:inherit;text-decoration:none;font-weight:700;display:inline-flex;align-items:center;gap:5px}
.ve-pd a:hover{text-decoration:underline;text-underline-offset:3px}
.ve-pd-leg{display:flex;flex-wrap:nowrap;gap:9px;white-space:nowrap;font-size:11px;font-weight:600;opacity:.75}
.ve-pd-leg span{display:inline-flex;align-items:center;gap:4px}
.ve-pd .nv-dot,.ve-pd-leg .nv-dot{width:9px;height:9px;margin:0;vertical-align:baseline}
.ve-pd .nv-dot[data-s=green],.ve-pd-leg .nv-dot[data-s=green]{background:var(--nv-ok)}
.ve-pd .nv-dot[data-s=yellow],.ve-pd-leg .nv-dot[data-s=yellow]{background:var(--nv-warn)}
.ve-pd .nv-dot[data-s=red],.ve-pd-leg .nv-dot[data-s=red]{background:var(--nv-bad)}
.ve-pd .nv-dot[data-s=stale]{background:var(--nv-off)}
@media(max-width:699px){.ve-tkp .ve-pd{font-size:13px;gap:9px}.ve-tkp .ve-pd-leg{font-size:10.5px;gap:8px}.ve-tkp .ve-pd-w{flex:1}}
@media(min-width:700px){.ve-chip .ve-pd-w{display:inline-flex;vertical-align:middle}.ve-chip .ve-pd{font-size:15px;gap:14px}.ve-chip .ve-pd-leg{color:var(--nv-mute)}}

/* The opening frame (Gal, 6 Oct: "should say something"): eyebrow, one line, a scroll cue. No pill, no buttons.
   Phones: the stops' top dark-glass block. Desktop: the stops' bottom-left caption. It fades out as stop 1's caption fades in. */
.ve-open{position:absolute;z-index:2;pointer-events:none;color:#fff;opacity:0}
.ve-open h2{margin:8px 0 0;font:700 clamp(19px,1.9vw,28px)/1.15 var(--nv-font);color:#fff;letter-spacing:-.01em}
.ve-open .vy-k{background:rgba(255,255,255,.22);color:#fff}
.ve-cue{display:block;margin-top:12px;font:700 var(--nv-small,13px)/1 var(--nv-font);color:rgba(255,255,255,.88)}
.ve-cue i{display:inline-block;font-style:normal;animation:veCue 1.8s ease-in-out infinite}
@keyframes veCue{50%{transform:translateY(4px)}}
@media(prefers-reduced-motion:reduce){.ve-cue i{animation:none}}
@media(min-width:700px){.ve-open{left:2%;bottom:4%;width:max-content;max-width:max(30%,380px);padding:14px 16px;border-radius:16px;background:rgba(10,30,45,.66);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}}
@media(max-width:699px){.ve-open{top:0;left:0;right:0;padding:calc(env(safe-area-inset-top) + 14px) 16px 26px;background:linear-gradient(rgba(5,16,26,.88) calc(100% - 26px),transparent)}
  .ve-open h2{font-size:clamp(18px,5.4vw,21px);margin-top:6px}}
/* shelter stop: left = wind name + one green and one red cove, right = a small bordered legend box */
.ve-sh-row{display:flex;align-items:center;gap:12px;min-width:0}.ve-sh-row .ve-pd-w{gap:5px;flex:1 1 auto}
.ve-sh-w{display:block;white-space:nowrap}.ve-chip .ve-sh-w b{color:var(--nv-ink)}
.ve-sh .ve-pd span,.ve-sh-row .ve-pd a{display:inline-flex;align-items:center;gap:5px;font-weight:700}
.ve-sh-leg{flex:0 0 auto;display:flex;flex-direction:column;gap:3px;border:1px solid var(--nv-line);border-radius:10px;padding:5px 9px;font-size:12px;font-weight:600;white-space:nowrap}
.ve-sh-leg em{font-style:normal;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;opacity:.7}
.ve-sh-leg span{display:inline-flex;align-items:center;gap:5px}.ve-sh-leg .nv-dot{width:9px;height:9px;margin:0;vertical-align:baseline}
.ve-sh-row .nv-dot[data-s=green]{background:var(--nv-ok)}.ve-sh-row .nv-dot[data-s=red]{background:var(--nv-bad)}
.ve-tkp .ve-sh{display:flex;flex:1;min-width:0;padding:2px 4px}.ve-tkp .ve-sh-w{font:700 14px/1.2 var(--nv-font)}.ve-tkp .ve-sh-leg{border-color:rgba(255,255,255,.4)}
@media(min-width:700px){.ve-chip .ve-sh-w{font-size:15px}.ve-chip .ve-sh-row .ve-pd{font-size:15px;gap:12px}}

/* First screen = hero + the "See how it works" band, exactly the viewport (Gal, 6 Oct): the story starts at the fold, never peeks.
   The hero grows to fill what the band leaves; a hero taller than that pushes the band down, nothing overlaps. */
.nv-anim{--vy-learn-h:64px}
@media(min-width:700px){.nv-anim{--vy-learn-h:88px}}
.nv-anim .hm-hero,.nv-anim .hm-hero.is-grow{min-height:calc(100vh - var(--vy-learn-h));min-height:calc(100svh - var(--vy-learn-h))}
.nv-anim .vy-learn{box-sizing:border-box;height:var(--vy-learn-h);padding-top:0;padding-bottom:0;align-items:center;background:var(--nv-page);position:relative;z-index:3}
@media(min-width:700px){.nv-anim .hm-live{max-height:calc(100svh - var(--hd) - var(--tk) - 24px - var(--pb) - var(--vy-learn-h))}}
@media(min-width:700px) and (max-height:780px){.nv-anim{--vy-learn-h:52px}.nv-anim .vy-learn__b{min-height:0;padding:2px 20px;gap:0}}
/* while the opening still loads the pin is dark, never the pale sky */
.nv-anim .vy-pin{background:var(--nv-ink)}
/* wind stop: static card, name + one-lit traffic light left, same bordered Legend right as the shelter stop */
.ve-wd-v{display:flex;align-items:center;gap:8px}.ve-wd-v>b{font:800 15px/1 var(--nv-font);letter-spacing:.04em}
.ve-tl{display:inline-flex;gap:6px;padding:5px 8px;border-radius:999px;background:var(--nv-ink)}
.ve-tl .nv-dot{width:13px;height:13px;margin:0;opacity:.22}.ve-tl .nv-dot.on{opacity:1;box-shadow:0 0 8px currentColor}
.ve-tl .nv-dot[data-s=green]{background:var(--nv-ok);color:var(--nv-ok)}.ve-tl .nv-dot[data-s=yellow]{background:var(--nv-warn);color:var(--nv-warn)}.ve-tl .nv-dot[data-s=red]{background:var(--nv-bad);color:var(--nv-bad)}
.ve-sh-leg .nv-dot[data-s=yellow]{background:var(--nv-warn)}.ve-sh-leg small{font-size:inherit;opacity:.7;font-weight:600}
.ve-chip .ve-wd-v>b{color:var(--nv-ink)}
/* stop 3 fares card (Gal, 6 Oct): header + two operator rows, departure and fare each */
.ve-fc{display:grid;gap:2px}
.ve-fc-h{white-space:nowrap;display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:3px}
.ve-chip .ve-fc-h b{color:var(--nv-teal-ink);font:800 11px/1 var(--nv-font);letter-spacing:.06em;text-transform:uppercase}
.ve-fc-h small{font:600 11px/1 var(--nv-font);opacity:.7}
.ve-chip .ve-fc-r{display:grid;grid-template-columns:1fr auto auto;align-items:baseline;gap:10px;padding:5px 0;border-top:1px solid rgba(15,42,61,.14);font:600 14px/1.2 var(--nv-font);color:inherit}
.ve-chip .ve-fc-r b{font-weight:800;color:inherit;font-variant-numeric:tabular-nums}
.ve-chip .ve-fc-r em{font-style:normal;font-weight:800;font-variant-numeric:tabular-nums}
@media(max-width:699px){
  html.vy-story.vm3 .ve-lv.ve-chip[data-k=stops]{border-radius:14px;padding:9px 12px;white-space:normal}
  html.vy-story.vm3 .ve-chip[data-k=stops] .ve-fc-r{grid-template-columns:1fr auto;font-size:13px;gap:14px}
  html.vy-story.vm3 .ve-lv.ve-chip[data-k=plan]{border-radius:14px;padding:9px 12px;white-space:normal;max-width:min(204px,calc(100% - 24px))}
  html.vy-story.vm3 .ve-chip[data-k=plan] .ve-fc-r{font-size:13px;gap:8px}
}
@media(min-width:700px){
  html.vy-story .ve-lv.ve-chip[data-k=plan]{padding:12px 16px}
  .ve-chip[data-k=plan] .ve-fc-r{font-size:15px;padding:6px 0}
}
/* mooring stop: static two-row card (Gal, 6 Oct). dot + name + big number, one second to read. Same markup in the chip, the phone strip and the panel. */
.ve-mo{display:flex;flex-direction:column;gap:6px;min-width:0;width:100%}
.ve-mo-r{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px}
.ve-mo .nv-dot{width:12px;height:12px;margin:0;vertical-align:baseline}
.ve-mo .nv-dot[data-s=green]{background:var(--nv-ok)}.ve-mo .nv-dot[data-s=red]{background:var(--nv-bad)}
.ve-mo-n{font:700 16px/1.2 var(--nv-font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ve-mo-v{font:600 14px/1.1 var(--nv-font);white-space:nowrap;text-align:right}
.ve-mo-v b{font:800 24px/1 var(--nv-font);margin-right:3px;color:inherit}
.ve-chip .ve-mo,.ve-lv .ve-mo{min-width:260px}
.ve-chip .ve-mo-r[data-s=green] b,.ve-lv:not(.ve-tkp) .ve-mo-r[data-s=green] b{color:var(--nv-ok-ink)}
.ve-chip .ve-mo-r[data-s=red] b,.ve-lv:not(.ve-tkp) .ve-mo-r[data-s=red] b{color:var(--nv-bad-ink)}
.ve-tkp .ve-mw{flex:1;min-width:0;padding:4px 6px}.ve-tkp .ve-mo{min-width:0}
.ve-tkp .ve-mo-n{font-size:15px}.ve-tkp .ve-mo-v b{font-size:22px}


/* Top (Gal, 9 Oct): the same dark pill as Skip, at the top of the caption */
html.vy-story .ve-ch .ve-skip{display:inline-flex;align-items:center;min-height:32px;padding:0 13px;border-radius:var(--nv-r-pill);background:rgba(15,42,61,.78);color:#fff;font:700 var(--nv-small,13px)/1 var(--nv-font);text-decoration:none;box-shadow:var(--nv-shadow)}
html.vy-story .ve-ch .ve-skip:hover{background:var(--nv-ink)}
/* phone: Top mirrors Skip - same pill, same centre line, floating just under the caption as Skip floats over the bar (Gal, 9 Oct) */
@media(max-width:699px){
  html.vy-story.vm3 .ve-ch .ve-skip{position:absolute;top:calc(100% - 12px);left:50%;translate:-50% 0;min-height:40px;padding:0 16px;gap:6px;z-index:2}
}
