/* The Ajova Voyage Builder. The globe stays pinned while the story scrolls
   past it in beats; every beat changes the world. Ships arrive only in the
   final, cream chapter. */
:root{--navy:#081d3a;--deep:#0a3157;--aqua:#06ccd6;--teal:#0fa39e;--teal-text:#0d5f5c;--sun:#ffd300;--coral:#ff7d6e;--cream:#fbf5e6;--paper:#fff;--ink:#10283f;--muted:#5d7082;--line:#eadfc4;--serif:Georgia,"Times New Roman",serif;--display:Anton,Impact,"Arial Narrow",sans-serif;--sans:Inter,system-ui,sans-serif}
*{box-sizing:border-box}
body{margin:0;font-family:var(--sans);color:#fff;background:var(--navy);line-height:1.55}
h1,h2,h3{margin:0;line-height:1}
.display,h1,h2{font-family:var(--display);font-weight:400;text-transform:uppercase;letter-spacing:.01em}
button,input,select{font:inherit}
button{cursor:pointer;min-height:44px;border:2px solid transparent;border-radius:14px;background:#fff;color:var(--navy);padding:10px 16px;font-weight:800;transition:transform .15s,background .15s,border-color .15s}
button:hover{transform:translateY(-1px)}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--sun);outline-offset:3px}
button:disabled{opacity:.55;cursor:not-allowed}
a{color:var(--teal-text)}
[hidden]{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.skip{position:fixed;top:-70px;z-index:100;background:#fff;color:var(--navy);padding:15px}
.skip:focus{top:8px}
small{display:block;font-size:12px;line-height:1.5}
.primary{background:var(--sun);color:var(--navy)}
.ghost{background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.35)}
.text{background:transparent;border:0;padding:6px 2px;min-height:36px;color:var(--teal-text);text-decoration:underline;text-underline-offset:4px;font-weight:700}

/* header over the stage */
body>header{position:fixed;top:0;left:0;right:0;z-index:30;display:flex;align-items:center;gap:16px;padding:16px clamp(16px,3vw,40px)}
.brand img{width:150px;display:block;filter:brightness(0) invert(1)}
.quick{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.chip{min-height:38px;padding:7px 14px;border-radius:999px;background:rgba(8,29,58,.55);color:#fff;border:1px solid rgba(255,255,255,.3);font-size:.85rem;font-weight:700;backdrop-filter:blur(10px)}
.chip.vision{background:var(--sun);color:var(--navy);border-color:var(--sun);font-weight:900}
.chip.vision span{margin-left:6px}
body.chapter-cream>header .chip{background:rgba(255,255,255,.85);color:var(--navy);border-color:var(--line)}
body.chapter-cream .brand img{filter:none}
body.chapter-cream>header{background:rgba(251,245,230,.92);backdrop-filter:blur(10px);box-shadow:0 1px 0 var(--line)}

/* pinned stage */
.story{position:relative}
.stage{position:sticky;top:0;height:100vh;overflow:hidden;background:var(--navy)}
#voyageMap{position:absolute;inset:0;background:radial-gradient(circle at 58% 45%,#15567a,#081d3a 68%)}
.vignette{position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,rgba(8,29,58,.75) 0%,rgba(8,29,58,.15) 34%,transparent 50%),linear-gradient(270deg,rgba(8,29,58,.55) 0%,transparent 40%),linear-gradient(0deg,rgba(8,29,58,.75),transparent 28%)}
.stage.right .vignette{background:linear-gradient(270deg,rgba(8,29,58,.75) 0%,rgba(8,29,58,.15) 34%,transparent 50%),linear-gradient(90deg,rgba(8,29,58,.55) 0%,transparent 40%),linear-gradient(0deg,rgba(8,29,58,.75),transparent 28%)}
.amanda{position:absolute;z-index:6;right:clamp(16px,3vw,40px);top:88px;display:flex;gap:12px;align-items:center;max-width:min(520px,60vw);padding:8px 16px 8px 8px;border-radius:999px;background:rgba(8,29,58,.6);border:1px solid rgba(255,255,255,.28);backdrop-filter:blur(12px);font-weight:600;font-size:.92rem;transition:.4s}
.stage.right .amanda{right:auto;left:clamp(16px,3vw,40px)}
.stage.right .dock{right:auto;left:clamp(16px,3vw,40px);align-items:flex-start}
.amanda.pop{animation:popin .55s cubic-bezier(.2,.9,.3,1.3) both}
@keyframes popin{0%{opacity:0;transform:translateY(14px) scale(.92)}60%{opacity:1;transform:translateY(-3px) scale(1.02)}100%{transform:none}}
.amanda::after{content:"";position:absolute;left:30px;bottom:-9px;border:9px solid transparent;border-top-color:rgba(8,29,58,.6);border-bottom:0}
.stage.right .amanda::after{left:30px}
.amanda img{width:44px;height:44px;border-radius:50%;object-fit:cover;border:2px solid var(--sun);flex:0 0 44px}
.counter{position:absolute;z-index:6;left:clamp(16px,3vw,40px);bottom:28px;font-family:var(--display);font-size:1.1rem;letter-spacing:.2em;color:var(--sun)}
.counter small{font-family:var(--sans);font-size:.66rem;font-weight:800;letter-spacing:.2em;color:rgba(255,255,255,.7);margin-top:4px;text-transform:uppercase}
.status{position:absolute;z-index:6;right:clamp(16px,3vw,40px);bottom:56px;margin:0;background:rgba(8,29,58,.6);border:1px solid rgba(255,255,255,.2);border-radius:14px;padding:12px 16px;backdrop-filter:blur(8px);font-weight:700;font-size:.9rem;max-width:320px}
.status b{display:block;font-family:var(--display);font-size:2.2rem;color:var(--sun);line-height:1}
.status small{display:block;margin-top:6px;font-weight:600;font-size:.78rem;color:rgba(255,255,255,.78)}
.status em{font-style:normal;font-weight:600;color:rgba(255,255,255,.85)}
#mapMessage{position:absolute;z-index:7;left:50%;transform:translateX(-50%);bottom:110px;max-width:320px;text-align:center;font-size:12px;line-height:1.5;color:#fff;background:rgba(8,29,58,.92);border-radius:10px;padding:10px 12px}
#mapMessage:empty{display:none}
#mapMessage button{font-size:11px;margin:6px 6px 0 0;min-height:36px}
.maplibregl-ctrl-attrib{font-size:10px!important;background:#e9efdd!important;color:#15333c!important}
.maplibregl-ctrl-bottom-right{bottom:16px!important}
.stage.right .status{right:auto;left:clamp(16px,3vw,40px);bottom:96px}
body.fallback #voyageMap::after{content:"THE WORLD IS STILL OPEN";position:absolute;right:12%;top:40%;font-size:12px;letter-spacing:.35em;color:var(--aqua)}
/* the glimpse strip over the water */
.strip{position:absolute;z-index:6;left:50%;right:clamp(16px,3vw,40px);bottom:110px;display:flex;gap:14px;animation:up .7s cubic-bezier(.2,.8,.2,1) both}
.stage.right .strip{left:clamp(16px,3vw,40px);right:50%}
@keyframes up{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
.gcard{flex:1;min-width:0;min-height:210px;border-radius:20px;overflow:hidden;position:relative;background:var(--deep);box-shadow:0 20px 50px rgba(0,0,0,.45);display:flex;flex-direction:column;justify-content:flex-end;padding:16px}
.gcard img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.55}
.gcard::after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgba(8,29,58,.95),rgba(8,29,58,.15) 60%)}
.gcard>*{position:relative;z-index:2}
.gcard b{display:block;font-family:var(--display);font-size:1.35rem;letter-spacing:.02em;line-height:1.05}
.gcard span{font-size:.8rem;color:rgba(255,255,255,.85)}
.gcard i{align-self:flex-start;font-style:normal;padding:4px 8px;border-radius:6px;background:var(--sun);color:var(--navy);font-size:.66rem;font-weight:900;text-transform:uppercase;margin-bottom:8px}
.gcard button{margin-top:10px;min-height:34px;padding:5px 12px;font-size:.78rem;align-self:flex-start}
.findings{display:flex;flex-direction:column;gap:10px;width:100%}
.ftitle{margin:0 0 2px;font-family:var(--display);font-size:1.1rem;letter-spacing:.12em;color:var(--sun);text-transform:uppercase}
.fcard{display:flex;align-items:center;gap:16px;padding:14px 18px;border-radius:18px;background:rgba(8,29,58,.78);border:1px solid rgba(255,255,255,.22);backdrop-filter:blur(10px);box-shadow:0 18px 50px rgba(0,0,0,.4);animation:up .6s cubic-bezier(.2,.8,.2,1) both}
.fcard:nth-child(3){animation-delay:.12s}.fcard:nth-child(4){animation-delay:.24s}
.fcard b{font-family:var(--display);font-size:2.6rem;line-height:1;color:var(--sun);flex:0 0 auto;min-width:64px}
.fcard b small{display:block;font-family:var(--sans);font-size:.62rem;letter-spacing:.12em;font-weight:800;color:rgba(255,255,255,.7);text-transform:uppercase;margin-top:2px}
.fcard span{font-size:1.02rem;font-weight:700;line-height:1.35}
.strip{flex-direction:column}
/* port hover cards */
.portcard{position:absolute;z-index:9;width:280px;border-radius:16px;overflow:hidden;background:#fff;color:var(--ink);box-shadow:0 20px 60px rgba(0,0,0,.45);pointer-events:none;animation:popin .3s ease both}
.portcard img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover}
.portcard .pc-body{padding:10px 14px 12px;position:relative}
.portcard b{display:block;font-family:var(--display);font-size:1.3rem;letter-spacing:.02em;color:var(--navy)}
.portcard p{margin:6px 0;font-size:.82rem;line-height:1.45;color:var(--ink)}
.portcard .pc-intro{font-weight:600;color:var(--navy)}
.portcard .pc-wiki{font-size:.72rem;color:var(--muted)}
.portcard q{display:block;margin:6px 0 2px;font:italic .85rem/1.4 var(--serif);color:var(--navy);quotes:none}
.portcard small{display:block;font-size:.68rem;color:var(--muted);line-height:1.4}
.portcard .pc-src{margin-top:6px;font-size:.6rem}.portcard .pc-src a{color:var(--teal-text)}
.portcard .pc-close{position:absolute;top:6px;right:6px;width:30px;min-height:30px;padding:0;border-radius:50%;pointer-events:auto;font-size:16px;border:1px solid var(--line)}
/* shortlist bar */
.shortbar{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:35;display:flex;align-items:center;gap:18px;padding:10px 12px 10px 20px;border-radius:999px;background:var(--navy);color:#fff;box-shadow:0 20px 60px rgba(0,0,0,.45);max-width:min(880px,94vw);animation:popin .4s ease both}
.shortbar b{display:block;font-weight:800;font-size:.95rem}.shortbar small{color:rgba(255,255,255,.75);font-size:.75rem;max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shortbar .sb-actions{display:flex;gap:8px;flex:0 0 auto}.shortbar .sb-actions button{min-height:40px;border-radius:999px}
.shortbar .sb-actions button:not(.primary){background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.3)}
/* collection dock */
.dock{position:absolute;z-index:6;right:clamp(16px,3vw,40px);top:186px;display:flex;flex-direction:column;gap:8px;align-items:flex-end;max-height:50vh;overflow:auto;scrollbar-width:none}
.dock .t{font-size:.66rem;letter-spacing:.2em;font-weight:800;color:var(--aqua)}
.dock button{padding:0;border:2px solid rgba(255,255,255,.7);background:var(--deep);width:56px;height:56px;border-radius:14px;overflow:hidden;box-shadow:0 10px 30px rgba(0,0,0,.4);display:grid;place-items:center;color:#fff;font-size:1.3rem}
.dock button img{width:100%;height:100%;object-fit:cover}
.dock .more{background:var(--sun);color:var(--navy);font-family:var(--display);font-size:1rem}

/* Amanda's speech bubbles, one per beat, beside the question */
.bubble{position:absolute;z-index:9;top:110px;width:min(360px,30vw);display:flex;gap:10px;align-items:flex-start;opacity:0;pointer-events:none;transform:translateY(10px) scale(.96);transition:opacity .45s,transform .45s}
.beat:not(.right) .bubble{left:calc(min(560px,46vw) + clamp(16px,3vw,40px) + 22px)}
.beat.right .bubble{right:calc(min(560px,46vw) + clamp(16px,3vw,40px) + 22px);flex-direction:row-reverse}
.bubble.show{opacity:1;transform:none;pointer-events:auto;animation:popin .55s cubic-bezier(.2,.9,.3,1.3) both}
.bubble.gone{opacity:0;transform:translateY(-8px);pointer-events:none}
.bubble img{width:58px;height:58px;border-radius:50%;object-fit:cover;border:3px solid var(--sun);flex:0 0 58px;box-shadow:0 10px 30px rgba(0,0,0,.4)}
.bubble span{position:relative;display:block;background:#fff;color:var(--navy);padding:12px 16px;border-radius:18px;font-weight:600;font-size:.98rem;line-height:1.45;box-shadow:0 16px 44px rgba(0,0,0,.4)}
.beat:not(.right) .bubble span::before{content:"";position:absolute;left:-9px;top:20px;border:9px solid transparent;border-right-color:#fff;border-left:0}
.beat.right .bubble span::before{content:"";position:absolute;right:-9px;top:20px;border:9px solid transparent;border-left-color:#fff;border-right:0}
/* welcome */
.welcome{position:fixed;inset:0;z-index:45;background:rgba(8,29,58,.5);backdrop-filter:blur(2px)}
/* The overlay centres Amanda's popup and scrolls when the popup is taller than the screen. It used to be
   centred with transform:translate(-50%,-50%), but the pop-in animation also sets transform and ends on
   transform:none, so on every device that plays it the popup landed with its corner in the middle of the
   screen, half off the right and the bottom (2026-09-14). Above the toast (40) so a toast never covers it. */
.welcome:not([hidden]){display:flex;overflow-y:auto;overscroll-behavior:contain;padding:96px 16px 120px}
.w-box{position:relative;margin:auto;width:min(560px,100%);background:#fff;color:var(--ink);border-radius:26px;padding:30px 32px 26px;text-align:center;box-shadow:0 40px 120px rgba(0,0,0,.5);animation:popin .6s cubic-bezier(.2,.9,.3,1.3) both}
.w-box img{width:92px;height:92px;border-radius:50%;object-fit:cover;border:4px solid var(--sun);margin:-76px auto 8px;display:block;box-shadow:0 12px 30px rgba(0,0,0,.35)}
.w-box h2{font-family:var(--display);font-weight:400;text-transform:uppercase;font-size:2rem;color:var(--navy);margin:0 0 8px}
.w-box p{margin:0 0 16px;color:var(--ink);font-size:1rem;line-height:1.55}
.w-arrow{position:absolute;color:var(--sun);filter:drop-shadow(0 6px 14px rgba(0,0,0,.4));stroke-dasharray:300;stroke-dashoffset:300;animation:draw 1.2s .5s ease-out forwards}
.w-left{left:calc(50% - 430px);top:34%;width:170px}
.w-up{right:520px;top:64px;width:120px}
@keyframes draw{to{stroke-dashoffset:0}}
/* beats */
.row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;align-items:center}
#voyageTools{margin:4px 0 10px}#voyageTools button{border:1px solid var(--line)}
.beats{position:relative;z-index:7;margin-top:-100vh;pointer-events:none}
.beat{position:relative;min-height:100vh;display:flex;align-items:center;padding:110px clamp(16px,3vw,40px) 90px}
.beat.right{justify-content:flex-end}
/* Opaque since 2026-09-14: at 97% the grey text on it measured about 4.44:1 once the navy page showed through, under the 4.5:1 minimum. */
.card{pointer-events:auto;width:min(560px,46vw);padding:28px 30px 24px;border-radius:24px;background:var(--cream);color:var(--ink);box-shadow:0 30px 80px rgba(0,0,0,.45);opacity:0;transform:translateY(30px);transition:.6s cubic-bezier(.2,.8,.2,1)}
.beat.on .card{opacity:1;transform:none}
.card .num{margin:0;font-family:var(--display);color:var(--teal-text);letter-spacing:.2em;font-size:.82rem}
.card h1{margin:6px 0 10px;font-size:clamp(1.8rem,2.5vw,2.5rem);color:var(--navy)}
.card .lede{margin:0 0 14px;color:var(--muted);font-size:.98rem}
.say{display:flex;gap:10px;align-items:flex-start;margin:14px 0 0;padding:12px 14px;border-radius:14px;background:#fff;border-left:4px solid var(--sun);color:var(--ink);font-size:.95rem;line-height:1.5}
.say img{width:32px;height:32px;border-radius:50%;object-fit:cover;flex:0 0 32px}
.say.enter{animation:up .5s .1s cubic-bezier(.2,.8,.2,1) both}
.opts{display:grid;gap:8px}.opts.two{grid-template-columns:1fr 1fr}
.opt{padding:12px 16px;border-radius:14px;border:2px solid var(--line);background:#fff;text-align:left;font-weight:800;color:var(--navy);display:flex;justify-content:space-between;align-items:center;gap:10px}
.opt:hover{border-color:var(--aqua)}
.opt[aria-pressed=true]{background:var(--sun);border-color:var(--sun)}
.opt[aria-pressed=true] small{color:var(--ink)}
.opt span{display:block}.opt small{font-weight:400;color:var(--muted);margin-top:2px;font-size:.8rem}
.opt i{font-style:normal;color:var(--teal-text)}
.card label{display:block;font-size:.85rem;color:var(--muted);margin:10px 0 6px;font-weight:600}
.card input,.card select{width:100%;min-height:48px;padding:10px 14px;border:2px solid var(--line);border-radius:12px;background:#fff;color:var(--ink)}
.card label.check{display:flex;align-items:center;gap:10px;color:var(--ink)}
.card input[type=checkbox]{width:20px;min-height:20px;margin:0}
.card .row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.card [role=alert]:empty{display:none}
.card [role=alert]{color:#b13a3a;font-size:.85rem;margin:8px 0 0}
.date-pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}
details.exact summary{cursor:pointer;color:var(--teal-text);font-weight:700;font-size:.85rem;margin:10px 0 4px}
.ports{display:grid;gap:6px;margin-top:8px;max-height:280px;overflow:auto}
.port{display:flex;justify-content:space-between;gap:10px;padding:10px 12px;border-radius:12px;background:#fff;border:2px solid var(--line);text-align:left}
.port[aria-pressed=true]{border-color:var(--coral);background:#fff0ec}
.port small{color:var(--muted);font-weight:600}
.voice{margin:10px 0;padding:12px 14px;background:#fff;border-left:4px solid var(--sun);border-radius:0 12px 12px 0;color:var(--ink)}
.voice p{margin:0 0 6px;font:italic 1rem/1.5 var(--serif)}
.voice footer{font-size:.78rem;color:var(--muted)}.voice footer b{color:var(--ink)}.voice footer a{color:inherit;text-decoration:none}.voice footer a:hover b{text-decoration:underline}
.voice .actions{display:flex;gap:6px;margin-top:6px}.voice .actions button{min-height:32px;padding:4px 10px;font-size:.75rem;border:1px solid var(--line)}
.callout{margin-top:12px;padding:12px 14px;border-radius:12px;background:var(--navy);color:#fff;font-weight:700}
.callout b{display:block;font-family:var(--display);font-size:1.5rem;color:var(--sun);letter-spacing:.02em}
.directions{display:grid;gap:8px;margin-top:10px}
.dir{padding:12px 14px;border-radius:12px;background:#fff;border:2px solid var(--line)}
.dir b{display:block;font-family:var(--display);font-size:1.1rem;letter-spacing:.02em;color:var(--navy)}
.dir small{color:var(--muted)}
.foot{display:flex;justify-content:space-between;gap:8px;margin-top:14px;padding-top:10px;border-top:1px solid var(--line)}

/* voyages chapter */
body.chapter-cream{background:var(--cream)}
.voyages{position:relative;z-index:8;background:var(--cream);color:var(--ink);padding:110px clamp(16px,4vw,60px) 90px;display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,40%);gap:32px;align-items:start}
.voyages-head{grid-column:1/-1;max-width:1100px}
.voyages .num{font-family:var(--display);color:var(--teal-text);letter-spacing:.2em;margin:0}
.voyages h2{font-size:clamp(2.2rem,4.4vw,4.4rem);color:var(--navy);margin:10px 0 12px;max-width:1000px}
.voyages .say{max-width:820px;margin:0 0 10px;background:#fff}
.route-map{position:sticky;top:90px;height:calc(100vh - 120px);border-radius:26px;overflow:hidden;background:var(--deep);box-shadow:0 24px 70px rgba(8,29,58,.18)}
.route-map #routeMap{position:absolute;inset:0}
.route-map .legend{position:absolute;left:14px;bottom:44px;z-index:2;background:rgba(8,29,58,.7);color:#fff;padding:10px 12px;border-radius:12px;font-size:.78rem;max-width:90%}
.route-map .legend b{display:block;font-family:var(--sans);font-weight:900;font-size:.95rem;letter-spacing:.01em;color:var(--sun);text-shadow:0 1px 2px rgba(0,0,0,.6);margin-bottom:2px}
.voyage-list{display:grid;gap:24px;min-width:0}
.voyage{background:#fff;border-radius:26px;overflow:hidden;box-shadow:0 20px 60px rgba(8,29,58,.1);scroll-margin-top:100px}
.voyage>.ship-photo img{width:100%;aspect-ratio:16/8;object-fit:cover;display:block}
.voyage>.ship-photo figcaption{padding:6px 28px 0;font-size:11px;color:#3f5265}
.vb{padding:20px 28px 26px}
.vb .line{font-weight:900;letter-spacing:.14em;text-transform:uppercase;font-size:.72rem;color:var(--teal-text)}
.vb h3{font-family:var(--display);font-weight:400;text-transform:uppercase;font-size:2.4rem;margin:6px 0 4px;color:var(--navy)}
.vb .intro{font:italic 1.1rem var(--serif);color:var(--teal-text);margin:0 0 12px}
.why{margin:4px 0 14px;padding:0;list-style:none;font:italic 1.05rem/1.4 var(--serif);color:var(--teal-text)}
.why li{padding:3px 0 3px 12px;border-left:3px solid var(--aqua);margin:4px 0}
.why li.from{border-left-color:var(--sun);color:var(--navy);font-style:normal;font-family:var(--sans);font-weight:700;font-size:.9rem}
.pdf-pitch{display:flex;gap:14px;align-items:flex-start;background:var(--cream);border-radius:16px;padding:14px 16px;margin:10px 0 4px;font-size:.98rem;line-height:1.5;color:var(--ink)}
.pdf-pitch img{width:56px;height:56px;border-radius:50%;object-fit:cover;border:3px solid var(--sun);flex:0 0 56px}
fieldset.magic{border:1px solid var(--line);border-radius:12px;padding:8px 14px 4px;margin:12px 0 4px}fieldset.magic legend{font-weight:800;padding:0 6px}fieldset.magic .check{margin:8px 0;font-weight:600;display:flex;gap:10px;align-items:flex-start;text-align:left}fieldset.magic .check input{margin-top:4px;flex:none}
/* compare sheet */
#compare{position:fixed;z-index:31;inset:20px;overflow:auto;background:var(--cream);color:var(--ink);border-radius:24px;box-shadow:0 40px 120px rgba(0,21,43,.5);animation:slide .45s cubic-bezier(.2,.7,.2,1) both}
.compare-wrap{padding:0 32px 24px;overflow-x:auto}
.compare-table{width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed}
.compare-table th,.compare-table td{vertical-align:top;text-align:left;padding:12px 14px;border-bottom:1px solid var(--line);font-size:.92rem;line-height:1.45}
.compare-table thead th{background:#fff;border-radius:16px 16px 0 0;padding:0 0 10px}.compare-table thead th:first-child{background:transparent}
.compare-table thead th .ship-photo img{border-radius:16px 16px 0 0;aspect-ratio:16/10}
.compare-table thead th .line,.compare-table thead th h3{padding:0 14px}
.compare-table thead th h3{font-family:var(--display);font-weight:400;text-transform:uppercase;font-size:1.6rem;color:var(--navy);margin:4px 0 8px}
.compare-table tbody th{width:150px;color:var(--teal-text);font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;font-weight:900;background:transparent}
.compare-table tbody td{background:#fff}
.compare-table tbody tr:first-child td{border-top:1px solid var(--line)}
.compare-table .voice{margin:0;padding:8px 12px}
.compare-table .none{color:var(--muted);margin:0}
.compare-table small{color:var(--muted)}
/* Phones get the comparison as swipeable ship cards (the table needs a width a phone does not have) and the route
   map full screen behind a button. Both are hidden here and shown in the phone block below. */
.compare-cards{display:none;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;padding:4px 16px 16px;scrollbar-width:none;align-items:flex-start}
.ccard{flex:0 0 86%;scroll-snap-align:center;background:#fff;border-radius:18px;overflow:hidden;box-shadow:0 10px 30px rgba(8,29,58,.1)}
.ccard .ship-photo img{max-height:200px}
.ccard-body{padding:12px 16px 16px}
.ccard .line{font-weight:900;letter-spacing:.14em;text-transform:uppercase;font-size:.68rem;color:var(--teal-text);margin:0}
.ccard h3{font-family:var(--display);font-weight:400;text-transform:uppercase;font-size:1.6rem;color:var(--navy);margin:4px 0}
.ccard dl{display:block;margin:0}
.ccard dt{margin:12px 0 2px;color:var(--teal-text);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;font-weight:900}
.ccard dd{margin:0;font-size:.92rem;line-height:1.45}
.ccard small{color:var(--muted)}.ccard .voice{margin:4px 0 0}.ccard .none{color:var(--muted);margin:0}
.compare-hint{display:none}
.route-close{display:none;position:absolute;top:12px;right:12px;z-index:3;width:44px;padding:0;border-radius:50%;font-size:22px;background:#fff;box-shadow:0 6px 20px rgba(8,29,58,.2)}
.sail{display:inline-block;padding:9px 13px;background:var(--sun);border-radius:10px;font-weight:850;margin-bottom:14px;color:var(--navy)}
.dlabel{margin:0 0 4px;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;font-weight:900;color:var(--teal-text)}
.dates{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px;padding:0;list-style:none}
.dates li{padding:6px 10px;border-radius:999px;background:#fff;border:1px solid var(--line);font-size:.8rem;font-weight:700;color:var(--navy)}
.dates li.more{background:transparent;color:var(--muted);font-weight:600}
.gline{margin:12px 0 4px;font-size:.9rem}
.voyages .lede.big{font:1.15rem/1.5 var(--serif);color:var(--ink);max-width:760px;margin:0 0 10px}
.itin{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px;padding:0;list-style:none}
.itin li{padding:8px 11px;border-radius:10px;background:var(--cream);font-size:.82rem;font-weight:700;color:var(--navy)}
.itin li.sea{background:#e6f7fb;color:#0a5c75}.itin li small{font-weight:500;color:var(--muted);font-size:.7rem}
.reasons{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.reason{padding:14px 16px;background:var(--cream);border-radius:14px}
.reason>b{display:block;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--teal-text);margin-bottom:6px}
.reason .sp{font-weight:800;margin-bottom:4px}.reason .desc{font-size:.85rem;color:var(--muted);margin:0 0 8px}
.reason .voice{margin:6px 0 0}
.trade{grid-column:1/-1;background:#fff3cf}.trade .voice{border-left-color:var(--coral)}
.va{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;scroll-margin-bottom:130px}
.more-voyages{grid-column:1;text-align:center}
.more-voyages button{min-height:52px;padding:12px 26px;border-radius:999px}
.dismissed{opacity:.55}

/* photos */
.ship-photo{margin:0;position:relative;background:#dfe9ee}
.ship-photo img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover}
.ship-photo.tile img{aspect-ratio:16/10}
.ship-photo.thumb img{aspect-ratio:1;width:52px;border-radius:8px}
.ship-photo figcaption{font-size:11px;color:#3f5265;padding:6px 0 0;line-height:1.5}
.ship-photo figcaption a{color:var(--teal-text)}
.ship-photo.art figcaption{color:#8a5a00}

/* ship guide sheet */
body.sheet-open{overflow:hidden}
body.sheet-open::before{content:"";position:fixed;inset:0;background:rgba(8,29,58,.55);z-index:29;backdrop-filter:blur(3px)}
/* Above the comparison (31), so a ship opened from the comparison shows on top of it and closing it returns there.
   Both sat at 31 until 2026-09-14, and the comparison, later in the page, covered the guide it had just opened. */
#sheet{position:fixed;z-index:32;top:20px;right:20px;bottom:20px;width:min(1000px,74vw);overflow:auto;background:var(--cream);color:var(--ink);border-radius:24px;box-shadow:0 40px 120px rgba(0,21,43,.5);animation:slide .45s cubic-bezier(.2,.7,.2,1) both}
@keyframes slide{from{transform:translateX(40px);opacity:0}to{transform:none;opacity:1}}
#sheetContent{padding:0 0 120px}
.sheet-bar{position:sticky;top:0;z-index:5;display:flex;justify-content:flex-end;padding:12px;pointer-events:none;height:0}
.sheet-bar .close{pointer-events:auto;width:44px;padding:0;border-radius:50%;font-size:22px;background:#fff;box-shadow:0 6px 20px rgba(8,29,58,.2)}
#sheetContent>.ship-photo img{border-radius:24px 24px 0 0;aspect-ratio:2/1}
#sheetContent>.ship-photo figcaption{padding:6px 32px 0}
.sheet-head{padding:16px 32px 8px}
.sheet-head .line{font-weight:900;letter-spacing:.14em;text-transform:uppercase;font-size:.72rem;color:var(--teal-text)}
.sheet-head h2{font-size:clamp(2rem,3.4vw,3.4rem);color:var(--navy);margin:6px 0 8px}
.sheet-head .lede{font-size:1rem;color:var(--muted);margin:0 0 14px}
.sheet-head .say{background:#fff}
.editorial{font-size:.95rem;color:var(--ink);margin:12px 0 4px;padding:14px 16px;background:#fff;border-left:4px solid var(--aqua);border-radius:0 12px 12px 0}
.editorial small{margin-top:6px;color:var(--muted)}
.chapters{position:sticky;top:0;z-index:4;display:flex;gap:6px;overflow-x:auto;padding:10px 32px;background:rgba(251,245,230,.96);border-bottom:1px solid var(--line);backdrop-filter:blur(8px);scrollbar-width:none}
.chapters a{flex:0 0 auto;padding:8px 14px;border-radius:20px;background:#fff;color:var(--ink);text-decoration:none;font-size:.85rem;border:1px solid var(--line);font-weight:700}
.chapter{padding:24px 32px;border-bottom:1px solid var(--line);scroll-margin-top:60px}
.chapter h3{font-family:var(--display);font-weight:400;text-transform:uppercase;font-size:1.8rem;color:var(--navy);margin:0 0 10px}
.chapter.personal{background:#fff}
.spaces,.cabins{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin:8px 0 12px}
.spaces article,.cabins article{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px;display:grid;gap:4px;align-content:start}
.chapter.personal .spaces article,.chapter.personal .cabins article{background:var(--cream)}
.spaces b,.cabins b{font-size:.98rem;font-weight:800}
.spaces p{font-size:.85rem;color:var(--muted);margin:2px 0 4px;line-height:1.5}
.spaces button,.cabins button{min-height:34px;padding:5px 12px;font-size:.78rem;justify-self:start;margin-top:4px;border:1px solid var(--line)}
#sheet details summary{cursor:pointer;color:var(--teal-text);font-size:.85rem;font-weight:700;min-height:36px;padding:6px 0}
.sailings{padding-left:18px;font-size:.9rem}.sailings li{margin:6px 0}
.sources p{font-size:.8rem;color:var(--muted)}
.friction{margin-top:12px;padding:12px 14px;border-radius:12px;background:#fff3cf}
.friction>b{display:block;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:#a0621b;margin-bottom:4px}

/* dialogs */
dialog{background:var(--cream);color:var(--ink);border:0;border-radius:22px;max-height:90svh;width:min(680px,94vw);padding:32px;overflow:auto;box-shadow:0 30px 100px #0008}
dialog.wide{width:min(1200px,96vw)}
dialog::backdrop{background:#03141ba8;backdrop-filter:blur(5px)}
dialog .close{position:sticky;top:0;float:right;border-radius:50%;width:44px;padding:0;font-size:22px;z-index:3;border:1px solid var(--line)}
dialog h2{font-size:2rem;padding-right:44px;margin:0 0 10px;color:var(--navy)}
dialog p{font-size:.95rem;color:var(--muted)}
dl{display:grid;grid-template-columns:120px 1fr;gap:10px;font-size:.85rem}dt{color:var(--teal-text)}dd{margin:0}
.compare{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin:14px 0}
.compare-col{background:#fff;border-radius:16px;overflow:hidden;display:grid;align-content:start;box-shadow:0 10px 30px rgba(8,29,58,.08)}
.compare-head{padding:0 0 8px}.compare-head .line,.compare-head h3,.compare-head small{padding:0 16px}
.compare-head h3{font-family:var(--display);font-weight:400;text-transform:uppercase;font-size:1.6rem;margin:6px 0;color:var(--navy)}
.compare-cell{padding:12px 16px;border-top:1px solid var(--line);font-size:.9rem}.compare-cell.protect{background:#fff6dc}
.compare-cell .line{font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--teal-text);font-weight:900}
.compare-col>button{margin:12px 16px 16px;border:1px solid var(--line)}
.protect{margin-top:16px;padding-top:14px;border-top:2px solid var(--aqua)}
#visionDialog{width:min(1040px,96vw);padding:44px;background:#fff}
#visionDialog h2{font-size:2.8rem}
#visionDialog .vision-lede{font:1.25rem/1.5 var(--serif);max-width:720px;color:var(--ink)}
#visionDialog .meta{font-size:12px;color:var(--teal-text)}
#deliveryForm{max-width:560px}#deliveryForm label{display:block;font-weight:700;margin:12px 0 4px}#deliveryForm input:not([type=checkbox]):not([type=radio]){width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:#fff}#deliveryForm .check{display:flex;gap:10px;align-items:flex-start;font-weight:500;margin:14px 0}#deliveryForm .check input{margin-top:5px}#deliveryForm .primary{margin-top:4px}
.vision-columns{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.vision-block{border-top:1px solid var(--line);padding:18px 0}
.vision-block h3{font-family:var(--display);font-weight:400;text-transform:uppercase;font-size:1.5rem;margin-bottom:8px;color:var(--navy)}
.vision-block li{font-size:.9rem;line-height:1.7;margin-bottom:6px}
.vision-ships{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}
.vision-ships article{background:var(--cream);border-radius:16px;padding:14px}
.vision-ships h3{font-size:1.5rem}.vision-ships p{font-size:.85rem;color:var(--ink)}
.vision-footer{border-top:2px solid var(--aqua);padding-top:22px;margin-top:22px}
#toast{position:fixed;bottom:92px;left:50%;transform:translateX(-50%);background:var(--navy);color:#fff;padding:12px 22px;border-radius:30px;z-index:40;font-size:.9rem;box-shadow:0 8px 30px #0006;max-width:min(560px,90vw);text-align:center}
#toast:empty{display:none}
#freshness{margin:0;padding:12px clamp(16px,4vw,60px) 20px;font-size:11px;color:var(--muted);background:var(--cream)}
.no-script{position:absolute;inset:10%;background:var(--navy);color:#fff;z-index:5;padding:24px}

@media(max-width:1100px){.voyages{grid-template-columns:1fr}.route-map{position:relative;top:auto;height:52vh;order:-1}.reasons{grid-template-columns:1fr}}
/* Phones (the page's own mobile() test: narrower than 900px). The globe is a short band pinned at the top, created
   non-interactive in app.js so it never takes a swipe, and the questions are ordinary page content scrolling beneath
   it. Until 2026-09-14 the questions floated over a full-screen map, so any touch outside the question card landed on
   the map canvas, whose touch-action is none: measured with raw touch, every swipe that started there (3 of 3) left
   the page where it was. */
@media(max-width:899px){
  :root{--band:clamp(190px,34svh,300px)}
  body>header{padding:8px 10px}.brand{display:flex;align-items:center;min-height:44px}.brand img{width:96px}.chip{font-size:.78rem;padding:6px 12px;min-height:44px}#chipDates,#chipLines{display:none}.quick{flex-wrap:nowrap}
  .desktop-only{display:none}
  .stage{height:var(--band);z-index:8}
  .vignette,.stage.right .vignette{background:linear-gradient(180deg,rgba(8,29,58,.6),transparent 42%),linear-gradient(0deg,rgba(8,29,58,.7),transparent 45%)}
  .beats{margin-top:0;pointer-events:auto;z-index:auto}
  .beat,.beat.right{min-height:0;display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;padding:14px 12px 10px}
  /* The newest question fills the screen under the band, so it can always be scrolled up to the band. */
  .beat:last-child{min-height:calc(100svh - var(--band))}
  .card{width:100%;opacity:1;transform:none;padding:22px 18px 18px;box-shadow:0 12px 40px rgba(0,0,0,.35)}.card h1{font-size:1.6rem}
  /* Amanda's line sits above the question it belongs to and stays once she has said it. */
  .bubble,.beat.right .bubble,.beat:not(.right) .bubble{position:static;order:-1;width:auto;margin:0 0 10px;flex-direction:row;opacity:1;transform:none;pointer-events:auto}
  .beat .bubble:has(>span:empty){display:none}
  .beat .bubble.gone{opacity:1;transform:none}
  .bubble img{width:44px;height:44px;flex:0 0 44px}.bubble span{font-size:.92rem;padding:10px 14px}
  .beat .bubble span::before{display:none}
  .welcome:not([hidden]){padding:84px 12px 16px}.w-left,.w-up{display:none}.w-box img{margin-top:-70px}
  .dock,.stage.right .dock{top:auto;bottom:16px;right:12px;left:auto;flex-direction:row;max-height:none}
  .amanda,.stage.right .amanda{right:auto;left:12px}
  .opts.two{grid-template-columns:1fr}
  .ports{max-height:none;overflow:visible}
  /* The findings live inside the good-day card on a phone, not over the globe. */
  .strip{display:none!important}
  .card .findings{margin-top:14px}.card .ftitle{color:var(--teal-text)}
  .card .fcard{background:var(--navy);color:#fff;border:0;box-shadow:none;backdrop-filter:none;padding:10px 12px;gap:10px;animation:none}.fcard b{font-size:1.8rem;min-width:44px}.fcard span{font-size:.9rem}
  .gcard{min-height:90px;flex-direction:row;align-items:center;gap:10px;padding:10px 12px}
  .counter{display:none}
  .status,.stage.right .status{left:10px;right:auto;top:auto;bottom:10px;max-width:calc(100% - 64px);padding:6px 10px;font-size:.72rem;line-height:1.3}
  .status b{display:inline;font-size:1.15rem;margin-right:4px}
  .status em,.status small{display:none}
  .portcard{display:none!important}
  .shortbar{left:12px;right:12px;transform:none;max-width:none;border-radius:20px;flex-wrap:wrap;gap:8px}
  body.sheet-open #shortbar{display:none}
  body:has(#shortbar:not([hidden])) #freshness{padding-bottom:150px}
  #toast{top:64px;bottom:auto}
  .voyages{padding:80px 12px 60px}
  .vb{padding:16px}.vb h3{font-size:1.8rem}
  /* The route opens full screen from a button on each voyage. .voyages is its own layer (z-index 8), so it rises
     with the panel or the header and the shortlist bar would draw over the map. */
  .route-map{display:none}
  body.route-open{overflow:hidden}
  body.route-open .voyages{z-index:46}
  body.route-open .route-map{display:block;position:fixed;inset:0;z-index:46;height:auto;border-radius:0}
  body.route-open .route-close{display:block}
  details.fold{margin:0 0 10px;border-top:1px solid var(--line)}
  details.fold>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:10px;list-style:none;font-weight:800;color:var(--teal-text)}
  details.fold>summary::-webkit-details-marker{display:none}
  details.fold>summary::after{content:"+";font-size:1.4rem;line-height:1}
  details.fold[open]>summary::after{content:"\2212"}
  .route-btn{margin:0 0 12px;border:1px solid var(--line)}
  #sheet{inset:0;width:100%;border-radius:0}
  .sheet-head,.chapter,.chapters{padding-left:16px;padding-right:16px}
  #compare{inset:0;border-radius:0}
  .compare-wrap{display:none}.compare-cards{display:flex}.compare-hint{display:block}
  dialog{padding:18px;max-height:94svh}.vision-columns{grid-template-columns:1fr}#visionDialog{padding:18px}
  dialog .close{float:none;display:block;margin:0 0 6px auto;box-shadow:0 6px 20px rgba(8,29,58,.2)}
  dialog h2{padding-right:0}#visionDialog h2{font-size:2.2rem}
  /* 44px tap targets, and buttons that look like buttons on a white card. */
  .card label.check,#deliveryForm .check{min-height:44px}#deliveryForm .check{padding:8px 0;margin:4px 0}
  .chapters a{min-height:44px;display:inline-flex;align-items:center}
  .va button:not(.primary){border:1px solid var(--line)}
  /* Amanda's popups run tighter, so the first-shortlist one ends on the screen of a typical phone. */
  .w-box{padding:22px 18px 18px}.w-box h2{font-size:1.6rem;text-wrap:balance}.w-box p{font-size:.95rem;line-height:1.5;margin-bottom:12px}
  .route-map .legend{bottom:56px}
  /* The map's credits start open and fold on the first scroll (app.js); while they are open the count sits above them. */
  .status{transition:bottom .3s}.stage:has(.maplibregl-compact-show) .status{bottom:44px}
  /* Folds are 44px targets too; padding keeps the disclosure marker the fold shows. */
  details.exact summary{padding:12px 0;margin:2px 0 0}#sheet details summary{min-height:44px;padding:12px 0}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media print{body>*:not(#visionDialog){display:none!important}#visionDialog{display:block!important;position:static;max-height:none;width:100%;border:0;overflow:visible;padding:0;box-shadow:none}#visionDialog button,#deliveryForm,.vision-footer{display:none!important}.vision-block{break-inside:avoid}dialog::backdrop{display:none}}

.delivery-status{color:var(--muted);margin:8px 0 0}.delivery-status:empty{display:none}
#deliveryForm button.busy{opacity:.85;cursor:progress}
/* The text beside Amanda's photo may shrink and a long email address may break; otherwise the address stretches the
   text past the card (Brian's iPhone, 2026-09-14). */
.sent-card{display:flex;gap:16px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-left:6px solid var(--sun);border-radius:16px;padding:16px 18px;margin:14px 0}
.sent-card img{width:56px;height:56px;border-radius:50%;object-fit:cover;border:3px solid var(--sun);flex:none}
.sent-card>div{min-width:0}.sent-card b{display:block;font-size:1.05rem;color:var(--navy);overflow-wrap:anywhere}.sent-card p{margin:4px 0 6px}.sent-card small{color:var(--muted)}
/* "send it again" reads as a link inside its sentence, so it keeps the sentence's line height (a text link in a sentence
   is exempt from the 44px rule); as a full-size button it pushed the small print's lines apart. */
.sent-card .linkish{min-height:0;background:none;border:0;padding:0;font:inherit;color:var(--teal-text);text-decoration:underline;cursor:pointer}

/* Cruise-line photos are shown whole: natural shape, never cropped, no rounded corners. */
.ship-photo.whole{background:none}
.ship-photo.whole img,.voyage>.ship-photo.whole img,#sheetContent>.ship-photo.whole img,.compare-table thead th .ship-photo.whole img{aspect-ratio:auto!important;width:100%;height:auto;max-height:560px;object-fit:contain!important;border-radius:0!important;background:var(--deep)}
.compare-table thead th .ship-photo.whole img{height:200px;max-height:200px}
/* Cruise-line photos: a gap between neighbours in Compare, the shortlist bar out of the way while comparing,
   and the Your-voyages close button in the gutter so it never sits on a photo. */
.compare-table thead th .ship-photo.whole{margin:0 5px}
body:has(#compare:not([hidden])) #shortbar{display:none}
@media (min-width:761px){#visionDialog{padding-right:60px}#visionDialog>.close{margin-right:-54px}}
/* Cruisetour land days (Denali, Fairbanks) are marked in the itinerary. */
.itin small.land{margin-left:0;color:var(--teal-text);font-weight:700;text-transform:uppercase;letter-spacing:.06em;font-size:10px}
