/* Oaks On Board · original app design. Self-hosted system fonts;
   no remote assets. */
:root{
  /* Bahamas palette: clear shallows, ocean blue, sun-warmed sand and coral. */
  --bg:#f7fbfc;
  --canvas:#e9f5f7;
  --paper:#fff;
  --surface:#fff;
  --surface-2:#edf8f9;
  --ink:#173c50;
  --ink-2:#466675;
  --ink-3:#506e7c;
  --soft:#506e7c;
  --teal:#007f8b;
  --teal-text:#006c79;
  --deep:#074b68;
  --tint:#ddf4f3;
  --tint-strong:#c7ebec;
  --line:#d4e7eb;
  --line-2:#bddbe1;
  --line-strong:#688e9c;
  --coral:#ef806a;
  --coral-text:#a34732;
  --coral-tint:#fff0e9;
  --sand:#f5e6c8;
  --sand-tint:#fff8ec;
  --sun:#ffd479;
  --success:#2f6a52;
  --warn:#8a5424;
  --rail-top:#075b79;
  --rail-bottom:#063e5a;
  --focus:#006c79;
  /* Type: the bold system sans everywhere (SF on Apple devices, Segoe UI on Windows). No serif renders anywhere in the UI. */
  --font-display:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI Variable Display','Segoe UI',system-ui,sans-serif;
  --font-sans:-apple-system,BlinkMacSystemFont,'SF Pro Text','Segoe UI Variable Text','Segoe UI',system-ui,sans-serif;
  --font-mono:ui-monospace,'SF Mono',Menlo,monospace;
  /* Legacy alias only: it resolves to the display stack so older references keep working without a serif. */
  --font-serif:var(--font-display);
  --fs-11:11px;
  --fs-12:12px;
  --fs-13:13px;
  --fs-15:15px;
  --fs-17:17px;
  /* Spacing for new rules (existing values are left as they are). */
  --sp-1:4px;
  --sp-2:8px;
  --sp-3:12px;
  --sp-4:16px;
  --sp-5:20px;
  --sp-6:24px;
  --sp-8:32px;
  --sp-10:40px;
  /* Radii, shadows, motion. */
  --r-xs:6px;
  --r-sm:8px;
  --r-md:12px;
  --r-lg:16px;
  --r-xl:22px;
  --radius:20px;
  --shadow-sm:0 1px 2px #074b680d,0 2px 6px #074b6808;
  --shadow-md:0 8px 24px #074b6812;
  --shadow-lg:0 24px 70px #063e5a66;
  --shadow:var(--shadow-md);
  --ease-out:cubic-bezier(.2,.8,.2,1);
  --ease-spring:cubic-bezier(.32,.72,0,1);
  --dur-fast:120ms;
  --dur:200ms;
  --dur-slow:320ms;
  /* Shell geometry (the phone tab bar and title bar arrive in stage 2). */
  --topbar-h:56px;
  --topbar-h-mobile:52px;
  --tabbar-h:50px;
  /* Aliases so the desktop/brand naming resolves to the same values. */
  --serif:var(--font-serif);
  --sans:var(--font-sans);
  --radius-sm:var(--r-sm);
  --radius-md:var(--r-md);
  --radius-lg:var(--r-lg);
  --radius-xl:var(--r-xl);
  --shadow-1:var(--shadow-sm);
  --shadow-2:var(--shadow-md);
  --shadow-3:var(--shadow-lg);
  --ease:var(--ease-out);
  --dur-1:var(--dur-fast);
  --dur-2:var(--dur);
  --dur-3:var(--dur-slow)
}

*{
  box-sizing:border-box
}
html{
  scroll-behavior:smooth;
  scroll-padding-top:calc(var(--topbar-h) + 26px);
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%
}
body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:var(--font-sans);
  font-size:15px;
  line-height:1.55
}
button,input,select,textarea{
  font:inherit
}
button,a,input,select,textarea{
  -webkit-tap-highlight-color:transparent
}
/* Touch feel: no double-tap zoom delay on controls; press states live under @media(hover:none). */
button,a,summary,label,input,select,textarea,.chip,.nav-link,.day-tab,.tab,.task-check{
  touch-action:manipulation
}
a{
  color:var(--teal);
  text-underline-offset:3px
}
button{
  cursor:pointer
}
button:disabled{
  opacity:.55;
  cursor:wait
}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{
  outline:3px solid var(--focus);
  outline-offset:2px
}
/* Dark surfaces switch the ring to sun so it keeps 3:1 against the fill. */
.button:not(.secondary):not(.cream),.day-tab.selected,.cruise-hero,.cruise-shows,.welcome-hero,.hero-showcase-bar,.cruise-hero-showcase .cruise-countdown,.toast,#voyage-status{
  --focus:var(--sun)
}
/* Deep-teal elements draw the sun ring inside their own fill, so both edges of the ring sit on the dark colour. */
.button:not(.secondary):not(.cream):focus-visible,.day-tab.selected:focus-visible,.skip-link:focus-visible{
  outline-offset:-5px
}
h1,h2,h3,h4{
  line-height:1.15;
  margin:0 0 .5em;
  font-weight:700;
  font-family:var(--font-display);
  letter-spacing:-.02em
}
h1{
  font-size:32px;
  letter-spacing:-.03em
}
h2{
  font-size:24px
}
h3{
  font-size:18px;
  font-weight:650;
  line-height:1.25;
  letter-spacing:-.01em
}
h4{
  font-size:15px;
  font-weight:650;
  letter-spacing:0
}
p{
  margin:0 0 15px
}
small{
  font-size:12px
}
svg.icon{
  vertical-align:middle;
  flex-shrink:0
}
a .icon{
  margin-top:-2px
}
button .icon{
  margin-top:-1px
}
ul{
  padding-left:23px
}
figure{
  margin:0
}
img{
  max-width:100%
}
strong{
  font-weight:650
}
.metrics strong,.metrics small,.budget-metrics strong,td,.event-time,.event-time strong,.day-times strong,.day-tab span,.progress-label,.cruise-countdown strong,.hero-count strong,.family-travel-counts>strong,.hero-scene-counter,.attendees,.task-progress h3,.family-progress-item .progress-label span,.section-heading .fine{
  font-variant-numeric:tabular-nums
}
code{
  font:13px/1.6 var(--font-mono);
  background:var(--surface-2);
  padding:3px 6px;
  border-radius:4px;
  overflow-wrap:anywhere
}
a.button{
  text-decoration:none
}
.button{
  display:inline-flex;
  justify-content:center;
  align-items:center;
  gap:8px;
  min-height:40px;
  padding:9px 18px;
  background:var(--deep);
  color:white;
  border:1px solid var(--deep);
  border-radius:10px;
  font-size:14px;
  line-height:1.35;
  font-weight:600;
  font-family:var(--font-sans);
  box-shadow:0 1px 2px #074b6826;
  transition:background var(--dur-fast),transform 80ms,box-shadow var(--dur-fast)
}
@media(hover:hover){
  .button:hover{
  background:#006c79;
  transform:translateY(-1px);
  box-shadow:0 6px 16px #074b6833
}
}
.button:active:not(:disabled){
  transform:scale(.97);
  box-shadow:none
}
.button.secondary{
  color:var(--deep);
  background:var(--tint);
  border-color:transparent;
  box-shadow:none
}
.button.danger,.button.secondary.danger{
  background:#fbeeea;
  border-color:transparent
}
@media(hover:hover){
  .button.secondary:hover{
  background:var(--tint-strong);
  box-shadow:none;
  transform:none
}
.button.danger:hover{
  background:#f6dfd8
}
.button.cream:hover{
  background:#f1e2b8
}
}
.button.cream{
  color:var(--deep);
  background:#f6eccf;
  border-color:#f6eccf
}
.button.small{
  min-height:34px;
  padding:6px 12px;
  font-size:13px;
  border-radius:8px
}
.button.full{
  width:100%
}
.text-button{
  border:0;
  min-height:32px;
  padding:4px 0;
  background:transparent;
  color:var(--teal);
  font-size:13px;
  font-weight:600;
  text-align:left
}
@media(hover:hover){
  .text-button:hover{
  text-decoration:underline
}
}
.text-button:active{
  opacity:.6
}
.danger{
  color:#a3382e!important
}
.icon-button{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border:0;
  background:transparent;
  color:var(--ink);
  width:40px;
  height:40px;
  min-width:40px;
  border-radius:10px;
  font-size:24px;
  text-decoration:none;
  transition:background var(--dur-fast),transform 80ms
}
@media(hover:hover){
  .icon-button:hover{
  background:var(--tint)
}
}
.icon-button:active{
  background:var(--tint);
  transform:scale(.94)
}
.eyebrow{
  display:block;
  font-size:11px;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  line-height:1.5;
  color:var(--teal-text);
  margin-bottom:8px
}
.eyebrow.small{
  font-size:11px;
  margin:0
}
.muted,.fine{
  color:var(--soft)
}
.fine{
  font-size:12px;
  line-height:1.65
}
.lead{
  font-size:17px
}
.preserve{
  white-space:pre-wrap;
  overflow-wrap:anywhere
}
.inline{
  display:flex;
  align-items:center;
  gap:10px
}
.inline.wrap{
  flex-wrap:wrap
}
.inline.split{
  justify-content:space-between
}
.text-link{
  display:inline-flex;
  align-items:center;
  gap:9px;
  font-size:13px;
  font-weight:650;
  text-decoration:none
}
@media(hover:hover){
  .text-link:hover{
  text-decoration:underline
}
}
.back-link{
  display:inline-flex;
  margin-bottom:20px;
  font-size:13px;
  text-decoration:none
}
.back-link .icon{
  width:18px;
  height:18px;
  margin-left:-4px
}
.badge{
  display:inline-block;
  padding:3px 9px;
  border-radius:999px;
  font-size:11px;
  line-height:1.4;
  letter-spacing:.02em;
  font-weight:700;
  white-space:nowrap;
  background:var(--surface-2);
  color:var(--ink-2)
}
.badge.idea,.badge.pending,.badge.requested,.badge.maybe{
  background:#fbefcf;
  color:#856326
}
.badge.planned,.badge.household,.badge.member{
  background:#e5eeed;
  color:var(--teal-text)
}
.badge.confirmed,.badge.active,.badge.going{
  background:#dfeee5;
  color:#2f6149
}
.badge.cancelled,.badge.disabled,.badge.declined,.badge.pass{
  background:#f5e4de;
  color:#a85740
}
.badge.admin,.badge.personal{
  background:#e6e8f3;
  color:#535e8d
}
.badge.viewer{
  background:#eee8dc;
  color:#5e5340
}
.private-label{
  display:inline-flex;
  align-items:center;
  gap:5px;
  font-size:11px;
  font-weight:600;
  color:#6b5f38;
  border-radius:999px;
  padding:2px 8px;
  background:#f0ecd9
}
.private-label .icon{
  width:12px;
  height:12px;
  margin:0
}
.clamp{
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden
}
.skip-link{
  position:fixed;
  left:15px;
  top:-100px;
  z-index:1000;
  display:inline-flex;
  align-items:center;
  min-height:44px;
  padding:10px 16px;
  border-radius:12px;
  background:var(--deep);
  color:#fff;
  font-weight:600;
  text-decoration:none;
  --focus:var(--sun)
}
.skip-link:focus{
  top:max(15px,calc(env(safe-area-inset-top) + 12px))
}
.sr-only{
  position:absolute;
  width:1px;
  height:1px;
  padding:0;
  margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0
}
[hidden]{
  display:none!important
}

.sidebar{
  width:248px;
  background:transparent;
  height:100dvh;
  position:fixed;
  top:0;
  left:0;
  padding:20px 12px 14px;
  display:flex;
  flex-direction:column;
  z-index:50
}
.nav-scrim{
  display:none
}
.brand{
  display:flex;
  align-items:center;
  gap:13px;
  color:var(--deep);
  text-decoration:none;
  margin:0 8px;
  font:800 24px/1 var(--font-display);
  letter-spacing:-.02em
}
.brand-icon{
  display:grid;
  place-items:center;
  width:40px;
  height:40px;
  background:var(--deep);
  color:var(--sun);
  border-radius:12px
}
.brand-icon .icon{
  width:24px;
  height:24px
}
.brand-sub{
  display:block;
  font:700 10px/1.2 var(--font-sans);
  letter-spacing:.24em;
  margin-top:5px
}
.trip-label{
  margin:30px 12px 20px;
  font-size:11px;
  letter-spacing:.12em;
  font-weight:700;
  color:var(--soft)
}
.trip-label span{
  display:block;
  font-size:12px;
  letter-spacing:0;
  font-weight:400;
  color:var(--soft);
  margin-top:4px
}
.sidebar nav{
  overflow-y:auto;
  scrollbar-width:thin;
  min-height:0;
  margin:0 -12px;
  padding:2px 12px
}
.nav-link{
  position:relative;
  display:flex;
  align-items:center;
  gap:12px;
  padding:10px 12px;
  font-size:14px;
  font-weight:500;
  color:var(--ink-2);
  text-decoration:none;
  margin:1px 0;
  border-radius:10px;
  white-space:nowrap;
  touch-action:manipulation;
  transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)
}
@media(hover:hover){
  .nav-link:hover{
  background:var(--surface-2);
  color:var(--deep)
}
.nav-link:hover .icon{
  color:var(--teal)
}
}
.nav-link:active{
  background:var(--tint)
}
.nav-link.active{
  background:var(--tint);
  color:var(--deep);
  font-weight:600
}
.nav-link.active::before{
  content:'';
  position:absolute;
  left:-12px;
  top:50%;
  translate:0 -50%;
  width:3px;
  height:20px;
  border-radius:0 3px 3px 0;
  background:var(--teal)
}
.nav-link .icon{
  width:20px;
  height:20px;
  flex-shrink:0;
  color:var(--soft);
  transition:color var(--dur-fast) var(--ease-out)
}
.nav-link.active .icon{
  color:var(--teal)
}
.nav-label{
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis
}
.nav-section{
  font-size:11px;
  letter-spacing:.14em;
  color:var(--soft);
  font-weight:700;
  padding:22px 12px 6px
}
.sidebar-bottom{
  margin-top:auto;
  padding-top:16px
}
.sidebar-bottom>.fine{
  font-size:12px;
  display:block;
  padding:0 12px 12px
}
.profile{
  border-top:1px solid var(--line);
  padding:16px 6px 0;
  display:flex;
  align-items:center;
  gap:10px;
  color:var(--ink);
  text-decoration:none;
  border-radius:12px
}
@media(hover:hover){
  .profile:hover{
  background:var(--surface-2)
}
}
.profile strong{
  font-size:13px;
  display:block;
  max-width:160px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap
}
.profile small{
  font-size:12px;
  color:var(--soft);
  display:block;
  max-width:160px;
  overflow:hidden;
  text-overflow:ellipsis
}
.avatar{
  width:38px;
  height:38px;
  min-width:38px;
  border-radius:50%;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  font:600 16px var(--font-sans);
  color:#5f5530;
  background:#eee6ce
}
.small-avatar{
  width:26px;
  height:26px;
  min-width:26px;
  font-size:12px
}
.app-shell{
  position:relative;
  display:flex;
  flex-direction:column;
  min-height:100dvh
}
.topbar{
  position:sticky;
  top:0;
  z-index:40;
  min-height:var(--topbar-h);
  background:#f7fbfcf0;
  -webkit-backdrop-filter:saturate(180%) blur(16px);
  backdrop-filter:saturate(180%) blur(16px);
  border-bottom:1px solid var(--line);
  padding:0 28px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px
}
.topbar-spacer{
  display:none
}
.topbar-back{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  min-width:36px;
  margin-right:4px;
  border-radius:10px;
  color:var(--deep);
  touch-action:manipulation
}
.topbar-back .icon{
  width:22px;
  height:22px
}
@media(hover:hover){
  .topbar-back:hover{
  background:var(--tint)
}
}
.topbar-back:active{
  background:var(--tint)
}
.topbar-title{
  flex:1;
  min-width:0
}
.topbar-page{
  margin:0
}
.topbar-title strong{
  display:block;
  font:650 15px/1.2 var(--font-display);
  letter-spacing:-.01em;
  color:var(--deep);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis
}
.topbar-title span{
  display:block;
  font-size:12px;
  font-weight:400;
  color:var(--soft);
  margin-top:1px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis
}
.topbar-right{
  display:flex;
  gap:12px;
  align-items:center;
  flex-shrink:0
}
.sync-state{
  display:flex;
  align-items:center;
  gap:6px;
  padding:4px 10px 4px 8px;
  border-radius:999px;
  background:#e7f1ea;
  color:var(--success);
  font-size:11px;
  font-weight:600;
  white-space:nowrap;
  max-width:260px;
  overflow:hidden;
  text-overflow:ellipsis
}
.sync-state:before{
  content:'';
  flex-shrink:0;
  width:6px;
  height:6px;
  border-radius:50%;
  background:#4c8c6f
}
.sync-state.offline{
  background:#f8ecd9;
  color:var(--warn)
}
.sync-state.offline:before{
  background:#c3853a
}
.sync-state i{
  display:none
}
.account-menu{
  position:relative
}
.account-summary{
  list-style:none;
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:44px;
  height:44px;
  margin:-4px -5px -4px 0;
  border-radius:50%;
  touch-action:manipulation
}
.account-summary::-webkit-details-marker{
  display:none
}
.account-summary::marker{
  content:''
}
.account-summary .avatar{
  width:32px;
  height:32px;
  min-width:32px;
  font-size:15px;
  transition:box-shadow var(--dur-fast) var(--ease-out)
}
@media(hover:hover){
  .account-summary:hover .avatar{
  box-shadow:0 0 0 3px #e3ece4
}
}
.account-menu[open] .account-summary .avatar{
  box-shadow:0 0 0 3px var(--line)
}
.account-pop{
  position:absolute;
  right:0;
  top:calc(100% + 6px);
  min-width:220px;
  padding:6px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:14px;
  box-shadow:var(--shadow-lg);
  z-index:60;
  animation:pop-in var(--dur-fast) var(--ease-out) both
}
@keyframes pop-in{
  from{
  opacity:0;
  transform:translateY(-4px) scale(.98)
}
}
.account-pop-head{
  padding:8px 10px 10px;
  border-bottom:1px solid var(--line);
  margin-bottom:4px
}
.account-pop-head strong{
  display:block;
  font-size:13px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap
}
.account-pop-head small{
  font-size:12px;
  color:var(--soft)
}
.account-pop form{
  margin:0
}
.account-item{
  display:flex;
  gap:10px;
  align-items:center;
  width:100%;
  min-height:40px;
  padding:8px 10px;
  border-radius:9px;
  font-size:13px;
  font-weight:600;
  font-family:var(--font-sans);
  color:var(--ink);
  text-decoration:none;
  background:none;
  border:0;
  text-align:left;
  cursor:pointer;
  touch-action:manipulation
}
.account-item .icon{
  width:18px;
  height:18px;
  color:var(--soft)
}
@media(hover:hover){
  .account-item:hover{
  background:var(--surface-2)
}
}
.account-item:active{
  background:var(--tint)
}
.tabbar{
  display:none
}
#main:not(.auth-shell){
  flex:1 1 auto;
  width:100%;
  max-width:1560px;
  margin:0 auto;
  padding:24px 32px 56px
}
.page-heading{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:20px;
  margin:0 0 24px
}
.page-heading h1{
  font-size:28px;
  margin-bottom:6px
}
.page-heading p{
  color:var(--soft);
  margin:0;
  font-size:14px;
  max-width:760px
}
.page-heading .eyebrow{
  margin-bottom:8px
}
.page-heading .button{
  flex-shrink:0
}
.page-heading>.button,.page-heading>.inline{
  padding-top:4px
}
.page-heading>.inline{
  gap:8px;
  justify-content:flex-end
}
.app-footer{
  display:flex;
  justify-content:space-between;
  gap:15px;
  padding:18px 32px 22px;
  border-top:1px solid var(--line);
  color:var(--ink-3);
  font-size:12px
}
.app-footer a{
  margin-left:8px
}
/* Update notice floats as a pill under the top bar (id and hidden contract unchanged; centred in the content column without transforms so pop-in can animate). */
.update-banner{
  position:fixed;
  top:calc(var(--topbar-h) + 20px);
  left:calc(258px + 16px);
  right:26px;
  margin:0 auto;
  width:max-content;
  max-width:calc(100vw - 258px - 42px);
  z-index:45;
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:center;
  gap:4px 12px;
  padding:9px 18px;
  border:1px solid #efd98e;
  border-radius:999px;
  background:#fff0bf;
  color:#705813;
  font-size:12px;
  line-height:1.4;
  box-shadow:var(--shadow-md);
  animation:pop-in var(--dur) var(--ease-out) both
}
.update-banner .text-button{
  margin-left:0;
  min-height:32px;
  white-space:nowrap
}
.section-heading{
  display:flex;
  justify-content:space-between;
  align-items:end;
  gap:18px;
  margin:32px 0 14px
}
.section-heading h2{
  font-size:22px
}
.section-heading h2{
  margin:0
}
.section-heading .eyebrow{
  margin-bottom:7px
}
.panel{
  background:var(--paper);
  border:1px solid var(--line);
  padding:22px;
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-sm);
  margin-bottom:20px
}
/* Cards share one lift on hover (pointer devices) and a press on touch. */
.panel,.catalog-card,.feature-card,.cruise-highlight,.cruise-port,.cruise-show,.cruise-quicklinks a,.day-tab{
  transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out),border-color var(--dur-fast)
}
@media(hover:hover){
  .catalog-card:hover,.feature-card:hover,.cruise-highlight:hover,.cruise-port:hover,.cruise-quicklinks a:hover{
  transform:translateY(-2px);
  box-shadow:var(--shadow-md)
}
}
.panel>:last-child{
  margin-bottom:0
}
.panel.soft{
  background:var(--surface-2);
  border-color:transparent
}
.panel p{
  font-size:14px;
  line-height:1.7
}
.cards{
  display:grid;
  gap:22px;
  margin-bottom:25px
}
.cards.three{
  grid-template-columns:repeat(3,minmax(0,1fr))
}
.cards.two{
  grid-template-columns:repeat(2,minmax(0,1fr))
}
.cards .panel{
  margin-bottom:0
}
.notice{
  background:#f8efd8;
  border:1px solid #efddb2;
  color:#766340;
  border-radius:var(--r-md);
  padding:16px 20px;
  font-size:13px;
  margin:0 0 23px;
  line-height:1.6
}
.notice p{
  margin:6px 0 0
}
.notice.compact{
  padding:12px 16px;
  font-size:12.5px
}
.onboarding{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:25px
}
.onboarding .button{
  white-space:nowrap
}
.private-banner{
  display:flex;
  align-items:center;
  gap:9px;
  border:1px solid var(--line);
  background:var(--surface-2);
  color:var(--ink-2);
  padding:13px 18px;
  border-radius:var(--r-md);
  font-size:13px;
  margin-bottom:22px
}
.private-banner .icon{
  flex-shrink:0
}
.empty{
  padding:36px 20px;
  text-align:center;
  background:var(--sand-tint);
  border:1px dashed var(--line);
  border-radius:var(--r-lg);
  grid-column:1/-1
}
.empty h3{
  margin:14px 0 7px;
  font-size:18px
}
.empty p{
  margin:auto;
  max-width:500px;
  font-size:14px;
  color:var(--soft)
}
.empty-icon{
  display:inline-flex;
  padding:13px;
  background:var(--tint);
  color:var(--teal);
  border-radius:50%
}
.empty-icon .icon{
  height:25px;
  width:25px
}
.metrics{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  background:white;
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:20px 0;
  margin-bottom:24px
}
.metrics>div{
  border-right:1px solid var(--line);
  padding:0 26px;
  min-width:0;
  overflow-wrap:anywhere
}
.metrics>div:last-child{
  border:0
}
.metrics span{
  display:block;
  font-size:11px;
  line-height:1.3;
  letter-spacing:.08em;
  text-transform:uppercase;
  font-weight:700;
  color:var(--soft)
}
.metrics strong{
  display:block;
  font:800 30px/1.2 var(--font-display);
  letter-spacing:-.04em;
  margin:6px 0 3px
}
.metrics small{
  display:block;
  color:var(--soft);
  font-size:12px
}
.metrics .metric-word{
  font-size:22px
}
.budget-metrics strong{
  font-size:30px
}

.hero-card{
  position:relative;
  height:360px;
  border-radius:24px;
  overflow:hidden;
  isolation:isolate;
  background:#1a5459
}
.hero-image{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center 55%;
  position:absolute;
  inset:0;
  z-index:-2
}
.hero-shade{
  background:linear-gradient(90deg,#072d32ec 0%,#0d303886 49%,#102c3819 100%);
  position:absolute;
  inset:0;
  z-index:-1
}
.hero-content{
  padding:41px 40px;
  color:#fff;
  max-width:610px
}
.hero-label{
  font-size:11px;
  font-weight:650;
  letter-spacing:.14em;
  color:#e6c687
}
.hero-content h2{
  font-size:clamp(33px,3.8vw,57px);
  line-height:1.08;
  letter-spacing:-.03em;
  margin:18px 0
}
.hero-content p{
  font-size:13px;
  color:#daf3f6;
  max-width:360px;
  line-height:1.7;
  margin-bottom:23px
}
.hero-count{
  position:absolute;
  right:28px;
  bottom:35px;
  border:1px solid #ffffff50;
  border-radius:17px;
  background:#112f3570;
  backdrop-filter:blur(9px);
  padding:17px 23px;
  color:white;
  text-align:center
}
.hero-count strong{
  font:800 44px/1 var(--font-display);
  letter-spacing:-.04em;
  display:block
}
.hero-count span{
  font-size:11px;
  letter-spacing:.06em
}
.photo-credit{
  font-size:11px
}
.hero-credit{
  position:absolute;
  bottom:8px;
  right:15px;
  color:#fff9
}
.route-bar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:23px 25px;
  margin-bottom:25px
}
.route-bar>span{
  color:#daf3f6;
  font-size:25px
}
.route-bar strong{
  font-family:var(--font-display);
  font-size:15px;
  font-weight:650;
  display:block
}
.route-bar small{
  font-size:11px;
  color:var(--soft);
  font-weight:650;
  letter-spacing:.12em
}
.dashboard-grid{
  display:grid;
  grid-template-columns:minmax(0,1fr) 285px;
  gap:26px
}
.dashboard-grid .section-heading{
  margin-top:10px
}
.right-column{
  padding-top:11px
}
.priorities{
  background:var(--tint);
  border-color:transparent;
  padding:25px 28px
}
.priorities h2{
  font-size:28px;
  margin:15px 0
}
.tiny-rule{
  width:45px;
  border-top:1px solid var(--line-2);
  margin:22px 0
}
.icon-circle{
  display:inline-flex;
  background:var(--tint);
  padding:10px;
  border-radius:50%;
  color:var(--teal-text)
}
.right-column h3{
  margin:0;
  font-size:18px
}
.progress-label{
  display:flex;
  justify-content:space-between;
  gap:10px;
  font-size:12px;
  margin-top:21px
}
.progress-label span{
  color:var(--soft)
}
progress{
  height:8px;
  width:100%;
  border:0;
  border-radius:10px;
  appearance:none;
  -webkit-appearance:none;
  background:var(--tint);
  overflow:hidden;
  margin:13px 0 22px
}
progress::-webkit-progress-bar{
  background:var(--tint);
  border-radius:10px
}
progress::-webkit-progress-value{
  background:var(--teal);
  border-radius:10px
}
progress::-moz-progress-bar{
  background:var(--teal);
  border-radius:10px
}
.date-kicker{
  font-size:11px;
  color:var(--soft);
  font-weight:600;
  letter-spacing:.06em;
  margin:16px 0 8px
}
.event-card{
  display:flex;
  gap:18px;
  background:#fff;
  border:1px solid var(--line);
  border-left:4px solid var(--line-strong);
  border-radius:var(--r-lg);
  padding:16px 18px;
  position:relative;
  margin-bottom:12px;
  box-shadow:var(--shadow-sm);
  transition:box-shadow var(--dur) var(--ease-out),border-color var(--dur-fast)
}
@media(hover:hover){
  .event-card:hover{
  box-shadow:var(--shadow-md);
  border-top-color:var(--line-2);
  border-right-color:var(--line-2);
  border-bottom-color:var(--line-2)
}
}
.event-card.port{
  border-left-color:#7fa8b0
}
.event-card.adventure{
  border-left-color:#d7a766
}
.event-card.shows{
  border-left-color:#a5a0bc
}
.event-time{
  min-width:96px;
  max-width:110px;
  border-right:1px solid var(--line);
  padding-right:14px;
  color:var(--deep)
}
.event-time strong{
  font-size:14px;
  font-weight:700;
  display:block
}
.event-time span{
  font-size:11px;
  color:var(--soft);
  display:block;
  margin-top:4px
}
.event-body{
  flex:1;
  min-width:0
}
.event-body h3{
  font-size:17px;
  font-weight:650;
  margin:6px 0 4px
}
.event-body h3 a{
  color:var(--ink);
  text-decoration:none
}
@media(hover:hover){
  .event-body h3 a:hover{
  color:var(--teal)
}
}
.event-body p{
  font-size:13px;
  color:var(--soft);
  margin-bottom:10px
}
.event-location{
  display:flex;
  align-items:center;
  gap:5px
}
.event-location .icon{
  height:12px;
  width:12px
}
.event-more{
  width:40px;
  min-width:40px;
  height:40px
}
.event-more .icon{
  height:17px;
  width:17px
}
.event-bottom{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  flex-wrap:wrap
}
.attendees{
  display:flex;
  align-items:center;
  gap:5px;
  font-size:11px;
  color:var(--ink-3)
}
.attendees .avatar+.avatar{
  margin-left:-8px;
  border:2px solid white
}
.rsvp-form{
  display:flex;
  gap:4px;
  flex-wrap:wrap
}
.chip{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  min-height:32px;
  border:1px solid var(--line-2);
  background:white;
  color:var(--ink-2);
  padding:0 14px;
  border-radius:999px;
  font-size:12px;
  font-weight:600;
  text-decoration:none;
  transition:background var(--dur-fast),border-color var(--dur-fast),color var(--dur-fast),transform 80ms
}
@media(hover:hover){
  .chip:hover{
  border-color:var(--teal);
  color:var(--teal-text)
}
}
.chip:active{
  transform:scale(.97)
}
.chip.selected{
  background:var(--tint);
  border-color:var(--line-2);
  color:var(--teal-text)
}
/* Selected RSVP shows a check icon (aria-hidden) so the state is not colour-only and the accessible name stays 'Going'. */
.chip .chip-check{
  display:none;
  width:14px;
  height:14px;
  margin:0 -2px 0 0;
  stroke-width:2.6
}
.chip.selected .chip-check{
  display:inline-block
}
.rsvp-form .chip{
  font-size:12px;
  padding:0 12px;
  min-height:32px
}
.photo{
  position:relative;
  overflow:hidden
}
.photo img{
  width:100%;
  aspect-ratio:16/10;
  object-fit:cover;
  display:block;
  background:#d7dfda
}
.photo figcaption{
  position:absolute;
  bottom:0;
  left:0;
  width:100%;
  padding:20px 12px 8px;
  font-size:11px;
  line-height:1.4;
  background:linear-gradient(transparent,#0d2f3ce6);
  color:#fffffff0;
  text-shadow:0 1px 2px #0d2f3c99
}
.photo figcaption a{
  color:white;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:32px;
  min-height:32px;
  margin:-8px 0 -8px 2px;
  vertical-align:middle
}
.feature-card{
  background:white;
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  overflow:hidden;
  color:var(--ink);
  text-decoration:none;
  box-shadow:var(--shadow)
}
.feature-card>div{
  padding:22px 22px 19px
}
.feature-card h3{
  font-size:20px
}
.feature-card p{
  font-size:12px;
  color:var(--soft);
  margin:0
}
@media(hover:hover){
  .feature-card:hover .photo img{
  transform:scale(1.02);
  transition:transform .3s
}
}
.day-tabs{
  display:flex;
  gap:8px;
  overflow-x:auto;
  padding:2px 2px 10px;
  margin-bottom:14px;
  scroll-snap-type:x proximity;
  scrollbar-width:thin
}
.day-tab{
  flex:0 0 auto;
  min-width:88px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  min-height:76px;
  background:white;
  border:1px solid var(--line);
  border-radius:var(--r-md);
  padding:10px 12px;
  text-decoration:none;
  color:var(--ink);
  scroll-snap-align:start;
  box-shadow:var(--shadow-sm)
}
@media(hover:hover){
  .day-tab:not(.selected):hover{
  border-color:var(--line-2);
  background:var(--surface)
}
}
.day-tab:active{
  transform:scale(.98)
}
.day-tab:first-child{
  min-width:116px
}
.day-tab span{
  display:block;
  font:700 20px/1.1 var(--font-display);
  letter-spacing:-.02em;
  color:var(--ink);
  white-space:nowrap
}
.day-tab:first-child span{
  font:700 11px/1.3 var(--font-sans);
  letter-spacing:.06em;
  color:var(--soft)
}
.day-tab strong{
  display:block;
  font-size:12px;
  font-weight:600;
  color:var(--ink-2);
  margin-top:4px;
  white-space:nowrap
}
.day-tab:first-child strong{
  font-size:16px;
  font-weight:700;
  color:var(--ink);
  margin-top:5px
}
.day-tab small{
  display:block;
  color:var(--soft);
  font-size:11px;
  margin-top:2px
}
.day-tab.selected{
  background:var(--deep);
  color:white;
  border-color:var(--deep);
  box-shadow:var(--shadow-md)
}
.day-tab.selected span,.day-tab.selected strong{
  color:#fff
}
.day-tab.selected small,.day-tab.selected:first-child span{
  color:#daf3f6
}
.day-section{
  margin:30px 0 45px
}
.day-intro{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  margin-bottom:21px
}
.day-intro h2{
  font-size:24px
}
.day-intro p{
  font-size:13px;
  color:var(--soft);
  margin:0
}
.day-times{
  display:flex;
  gap:20px;
  text-align:right;
  flex-wrap:wrap;
  justify-content:flex-end
}
.day-times span{
  font-size:11px;
  color:var(--soft)
}
.day-times strong{
  display:block;
  font-size:12px;
  color:var(--ink)
}
.day-banner{
  display:grid;
  grid-template-columns:250px 1fr;
  gap:25px;
  align-items:center;
  background:var(--tint);
  border-radius:18px;
  overflow:hidden;
  margin-bottom:23px
}
.day-banner>div{
  padding:22px 25px 22px 0
}
.day-banner .photo{
  height:100%
}
.day-banner .photo img{
  height:100%;
  min-height:205px
}
.day-banner h3{
  font-size:20px
}
.day-banner p{
  font-size:12px
}
.warning-box{
  background:#f7ebd5;
  border:1px solid #dfca99;
  padding:15px 19px;
  border-radius:12px;
  color:#7f673a;
  font-size:12px;
  margin-bottom:24px
}
.warning-box summary{
  cursor:pointer;
  font-weight:650
}
.warning-box li{
  margin:6px 0
}
.catalog-controls{
  display:flex;
  justify-content:space-between;
  gap:18px;
  align-items:center;
  flex-wrap:wrap;
  margin-bottom:23px
}
/* iOS-style segmented control: a tinted track, white selected pill with a soft shadow. */
.filter-pills{
  display:inline-flex;
  gap:2px;
  flex-wrap:wrap;
  padding:3px;
  background:var(--surface-2);
  border:1px solid var(--line);
  border-radius:10px
}
.filter-pills .chip{
  min-height:32px;
  padding:0 12px;
  border:0;
  border-radius:7px;
  background:transparent;
  color:var(--ink-2);
  font-size:13px;
  font-weight:600
}
.filter-pills .chip.selected{
  background:#fff;
  color:var(--deep);
  box-shadow:var(--shadow-sm)
}
@media(hover:hover){
  .filter-pills .chip:not(.selected):hover{
  background:#ffffff99;
  color:var(--deep);
  border-color:transparent
}
}
.search-form{
  display:flex;
  gap:7px;
  align-items:center
}
.search-form input{
  margin:0;
  max-width:240px;
  font-size:13px;
  min-height:40px;
  border-radius:999px;
  padding-left:14px
}
.search-form .button{
  border-radius:999px;
  min-height:40px
}
.catalog-card{
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  overflow:hidden;
  background:white;
  display:flex;
  flex-direction:column
}
.catalog-card .photo img{
  aspect-ratio:16/10
}
.catalog-body{
  display:flex;
  flex-direction:column;
  padding:20px 23px;
  flex:1
}
.catalog-body>.inline{
  min-height:25px;
  margin-bottom:10px
}
.catalog-body .eyebrow{
  margin:0;
  font-size:11px
}
.catalog-body h3{
  font-size:20px
}
.catalog-body p{
  font-size:13px;
  color:var(--soft);
  line-height:1.6
}
.catalog-meta{
  margin-top:auto;
  display:flex;
  flex-direction:column;
  gap:2px;
  border-top:1px solid var(--line);
  padding:13px 0
}
.catalog-meta strong{
  font-size:12px
}
.catalog-meta span{
  font-size:12px;
  color:var(--soft)
}
.catalog-body>.button{
  margin-top:12px
}
.favorite{
  border:0;
  background:transparent;
  color:var(--line-strong);
  padding:10px;
  margin:-10px;
  width:45px;
  height:45px;
  display:grid;
  place-items:center;
  touch-action:manipulation
}
.favorite.saved{
  color:var(--coral-text)
}
.favorite.saved svg{
  fill:var(--coral-text)
}
.favorite .icon{
  height:18px;
  width:18px;
  transition:transform 80ms
}
.favorite:active .icon{
  transform:scale(.85)
}
.source-link{
  font-size:11px;
  margin:4px 0
}
.dining-intro{
  background:var(--tint);
  border:0;
  max-width:100%;
  padding:28px 32px
}
.dining-intro p{
  max-width:800px
}
.port-section{
  display:grid;
  grid-template-columns:38% 1fr;
  border:1px solid var(--line);
  border-radius:22px;
  background:white;
  overflow:hidden;
  margin:30px 0
}
.port-photo .photo,.port-photo img{
  height:100%
}
.port-photo img{
  min-height:365px
}
.port-body{
  padding:32px 30px
}
.port-body h2{
  font-size:30px;
  margin-bottom:5px
}
.port-body p{
  font-size:13px
}
.port-body p.lead{
  font-size:17px
}
.port-times{
  display:flex;
  gap:23px;
  padding:18px 0;
  margin:17px 0;
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  flex-wrap:wrap
}
.port-times small{
  font-size:11px;
  letter-spacing:.06em;
  color:var(--soft)
}
.port-times strong{
  display:block;
  font-size:12px
}
.port-options{
  grid-column:1/-1;
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:24px;
  padding:28px 32px;
  background:#fcfcf8;
  border-top:1px solid var(--line)
}
.port-options p{
  font-size:12px;
  color:var(--soft)
}
.port-options .eyebrow{
  font-size:11px
}
.port-options h3{
  font-size:18px
}
.full-row{
  grid-column:1/-1;
  margin:0
}
.household-card{
  display:flex;
  flex-direction:column
}
.household-card h2{
  font-size:22px
}
.household-monogram{
  font:700 26px/1 var(--font-display);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:13px;
  border-radius:16px;
  background:#eef0df;
  color:#7b805f;
  width:60px;
  height:63px;
  text-align:center;
  margin-bottom:20px
}
.household-card:nth-child(2n) .household-monogram{
  background:#f7e7dd;
  color:#ad7a64
}
.household-card:nth-child(3n) .household-monogram{
  background:#e4eff0;
  color:#527f88
}
.nap-pill{
  display:inline-flex;
  align-items:center;
  gap:6px;
  border-top:1px solid var(--line);
  padding-top:10px;
  color:var(--soft);
  font-size:12px;
  margin:0 0 14px
}
.nap-pill .icon{
  width:14px;
  height:14px
}
.household-members{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin:0 0 20px
}
.person-pill{
  display:inline-flex;
  align-items:center;
  gap:7px;
  font-size:12px
}
.care-actions{
  margin-top:17px
}
.care-card h3{
  margin-top:15px
}
.person-row{
  display:flex;
  align-items:center;
  gap:10px;
  padding:15px 0;
  border-bottom:1px solid var(--line);
  font-size:12px
}
.person-row .badge{
  margin-left:auto
}
.detail-grid{
  grid-template-columns:minmax(0,1fr) 300px
}
.comment{
  padding:20px 0;
  border-bottom:1px solid var(--line)
}
.comment p{
  margin-top:10px
}
.comment .inline{
  flex-wrap:wrap;
  font-size:12px
}
.comment+.comment{
  padding-top:20px
}
.comment:last-of-type{
  margin-bottom:24px
}
.task-progress{
  display:flex;
  align-items:center;
  gap:30px
}
.task-progress h3{
  font-size:20px
}
.task-progress p{
  margin:0
}
.task-progress progress{
  flex:1;
  max-width:320px;
  margin:0
}
.task-progress .check-label{
  margin:0;
  font-size:12px;
  flex-shrink:0
}
.task-list{
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  background:white;
  overflow:hidden
}
/* Each category is one card: a 44px header row and its rows. */
.task-group{
  background:#fff;
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  overflow:hidden;
  margin-bottom:16px
}
.task-group .section-heading{
  flex-direction:row;
  align-items:center;
  min-height:44px;
  margin:0;
  padding:8px 18px;
  background:var(--surface-2);
  border-bottom:1px solid var(--line)
}
.task-group .section-heading h2{
  font:700 12px/1.4 var(--font-sans);
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--ink-2)
}
.task-group .task-list{
  border:0;
  border-radius:0
}
.task-row{
  display:flex;
  align-items:flex-start;
  gap:12px;
  min-height:52px;
  padding:12px 18px;
  border-bottom:1px solid var(--line);
  transition:background var(--dur-fast)
}
@media(hover:hover){
  .task-row:hover{
  background:var(--surface)
}
}
.task-row:last-child{
  border:0
}
/* The check control is a 44px target on every device; the visible 26px box is drawn by ::before. */
.task-check{
  position:relative;
  z-index:0;
  display:flex;
  align-items:center;
  justify-content:center;
  width:44px;
  height:44px;
  min-width:44px;
  margin:-9px 0 -9px -9px;
  padding:0;
  border:0;
  border-radius:12px;
  background:none;
  color:white;
  font-size:15px;
  line-height:1;
  transition:transform 80ms
}
.task-check::before{
  content:'';
  position:absolute;
  z-index:-1;
  inset:9px;
  border:1.5px solid var(--line-strong);
  border-radius:8px;
  background:#fff;
  transition:background var(--dur-fast),border-color var(--dur-fast)
}
@media(hover:hover){
  .task-check:hover::before{
  border-color:var(--teal)
}
}
.task-check:active{
  transform:scale(.9)
}
.task-check.checked::before{
  background:var(--teal);
  border-color:var(--teal)
}
.task-check.just-checked{
  animation:check-pop 180ms var(--ease-out)
}
@keyframes check-pop{
  0%{
  transform:scale(.8)
}
60%{
  transform:scale(1.08)
}
100%{
  transform:scale(1)
}
}
.task-copy{
  flex:1;
  min-width:0
}
.task-copy h3{
  font:600 15px/1.4 var(--font-sans);
  letter-spacing:0;
  margin:3px 0 3px
}
.task-copy p{
  font-size:13px;
  color:var(--soft);
  max-width:850px;
  margin-bottom:6px
}
.task-copy .fine{
  font-size:12px;
  gap:6px
}
.task-row.done h3{
  text-decoration:line-through;
  color:var(--line-strong)
}
.task-row.done .task-copy{
  opacity:.65
}
.task-actions{
  display:flex;
  gap:4px;
  flex-shrink:0;
  margin:-6px -8px -6px 0;
  opacity:.6;
  transition:opacity var(--dur-fast)
}
@media(hover:hover){
  .task-row:hover .task-actions{
  opacity:1
}
}
.task-row:focus-within .task-actions{
  opacity:1
}
@media(hover:none){
  .task-actions{
  opacity:1
}
}
.task-actions .icon{
  width:16px;
  height:16px
}
.hide-completed .task-row.done{
  display:none
}
.table-wrap{
  overflow:auto;
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  background:white;
  margin-bottom:24px
}
table{
  border-collapse:collapse;
  width:100%;
  font-size:13px
}
th{
  position:sticky;
  top:0;
  z-index:1;
  background:var(--surface-2);
  text-align:left;
  font-size:11px;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--ink-2);
  padding:12px 18px;
  font-weight:650
}
td{
  padding:14px 18px;
  border-bottom:1px solid var(--line);
  vertical-align:top
}
tbody tr{
  transition:background var(--dur-fast)
}
@media(hover:hover){
  tbody tr:hover{
  background:#fafbf7
}
}
td.num,th.num{
  text-align:right;
  font-variant-numeric:tabular-nums;
  white-space:nowrap
}
tr:last-child td{
  border-bottom:0
}
td strong{
  font-size:13px;
  display:block;
  min-width:120px
}
td small{
  display:block;
  color:var(--soft);
  font-size:12px;
  margin-top:4px;
  max-width:330px
}
.excluded{
  opacity:.6
}
.amber{
  color:#7d5c1f
}
.note-body{
  font-size:14px!important;
  margin:22px 0 25px;
  line-height:1.8!important
}
.note-card h2{
  margin-top:19px
}
.details-list{
  display:grid;
  grid-template-columns:110px 1fr;
  gap:12px;
  font-size:13px;
  margin:26px 0
}
.details-list dt{
  color:var(--soft)
}
.details-list dd{
  margin:0
}
.admin-tabs{
  margin-bottom:35px
}
.role-cards p{
  font-size:12px
}
.role-cards h3{
  font-size:18px
}
.audit-list{
  max-height:550px;
  overflow:auto
}
.audit-row{
  display:flex;
  gap:15px;
  align-items:baseline;
  padding:12px 0;
  border-bottom:1px solid var(--line);
  font-size:12px
}
.audit-dot{
  width:6px;
  height:6px;
  min-width:6px;
  display:block;
  border-radius:50%;
  background:var(--line-strong)
}
.audit-row small{
  display:block;
  color:var(--soft);
  font-size:12px;
  margin-top:3px
}
.sources-list{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:15px
}
.sources-list .panel{
  margin:0
}
.sources-list h3{
  font:600 13px/1.45 var(--font-sans);
  letter-spacing:0
}
.sources-list p{
  font-size:12px
}
.credit-card{
  padding:15px
}
.credit-card img{
  width:100%;
  aspect-ratio:16/10;
  object-fit:cover;
  border-radius:11px;
  margin-bottom:18px
}
.credit-card h3{
  font-size:17px
}
.credit-card p{
  font-size:12px
}
.credit-card>a{
  font-size:12px
}

label{
  display:block;
  font-size:13px;
  font-weight:600;
  margin-bottom:17px;
  color:var(--ink)
}
input:not([type=checkbox]):not([type=hidden]),select,textarea{
  display:block;
  min-height:44px;
  width:100%;
  margin-top:7px;
  border:1px solid var(--line-strong);
  border-radius:10px;
  background:#fff;
  color:var(--ink);
  padding:10px 12px;
  font-size:14px;
  line-height:1.5;
  transition:border-color var(--dur-fast),box-shadow var(--dur-fast)
}
/* WebKit ignores min-height on a native menulist, so selects get an explicit height and a CSS chevron (data: SVG, allowed by img-src). */
select:not([multiple]):not([size]){
  height:44px;
  appearance:none;
  -webkit-appearance:none;
  padding-right:38px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23103e44' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 12px center;
  background-size:16px 16px;
  cursor:pointer
}
input::placeholder,textarea::placeholder{
  color:var(--soft);
  font-weight:400
}
textarea{
  resize:vertical
}
/* Soft teal glow on any focus; the keyboard focus-visible ring from the global rule stays on top of it. */
input:focus,select:focus,textarea:focus{
  border-color:var(--deep);
  box-shadow:0 0 0 3px #074b6826
}
input[type=checkbox]{
  height:20px;
  width:20px;
  min-width:20px;
  accent-color:var(--teal);
  margin:0
}
.check-label{
  display:flex;
  align-items:center;
  gap:10px;
  min-height:44px;
  font-size:13px;
  line-height:1.5;
  font-weight:500
}
.label-note{
  font-size:12px;
  font-weight:400;
  color:var(--soft);
  margin-left:5px
}
.form-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:0 19px
}
.form-actions{
  display:flex;
  justify-content:flex-end;
  gap:10px;
  border-top:1px solid var(--line);
  padding-top:20px;
  margin-top:23px
}
.form-error{
  padding:13px 15px;
  margin:15px 0;
  color:#9d3831;
  background:#faeae5;
  border:1px solid #edc5bb;
  border-radius:var(--r-sm);
  font-size:13.5px
}
.modal{
  width:min(560px,calc(100vw - 30px));
  max-height:calc(100dvh - 48px);
  overflow:hidden;
  overscroll-behavior:contain;
  padding:0;
  border:1px solid var(--line);
  border-radius:20px;
  color:var(--ink);
  background:var(--surface);
  box-shadow:0 30px 100px #07323435
}
.modal[open]{
  display:flex;
  flex-direction:column
}
.modal>form,.modal>.sheet-body{
  flex:1 1 auto;
  min-height:0;
  overflow:auto;
  overscroll-behavior:contain;
  padding:0 28px;
  scroll-padding-top:72px;
  scroll-padding-bottom:92px
}
.modal::backdrop{
  background:#102b37a6;
  backdrop-filter:blur(4px)
}
.dialog-head{
  display:flex;
  justify-content:space-between;
  gap:15px;
  align-items:center;
  margin-bottom:12px
}
.modal .dialog-head{
  position:sticky;
  top:0;
  z-index:2;
  background:var(--surface);
  padding:20px 0 12px;
  margin:0 0 10px;
  border-bottom:1px solid var(--line)
}
.dialog-head h2{
  font-size:20px;
  margin:0
}
.dialog-head .icon-button{
  width:40px;
  height:40px;
  min-width:40px;
  margin:0 -10px 0 0
}
.modal .form-actions{
  position:sticky;
  bottom:0;
  z-index:2;
  margin:20px -28px 0;
  padding:14px 28px 20px;
  background:var(--surface);
  border-top:1px solid var(--line)
}
.icon-button .icon{
  width:20px;
  height:20px
}
.photo-lightbox-close .icon{
  width:22px;
  height:22px
}
.modal .muted{
  font-size:12px;
  margin-bottom:23px
}
.modal .notice{
  font-size:12px
}
.field-info{
  align-self:center;
  font-size:12px;
  color:var(--soft);
  padding-bottom:16px
}
.inline-form{
  display:flex;
  gap:20px;
  align-items:end
}
.inline-form label{
  margin:0;
  flex:1
}
.inline-form .button{
  height:44px
}
.toast{
  position:fixed;
  bottom:24px;
  left:calc(50% + 129px);
  transform:translateX(-50%);
  background:var(--deep);
  color:#fff;
  padding:14px 18px;
  border-radius:14px;
  font-size:14px;
  z-index:200;
  box-shadow:var(--shadow-lg);
  max-width:min(600px,90vw);
  animation:toast-in var(--dur) var(--ease-out) both
}
@keyframes toast-in{
  from{
  opacity:0;
  transform:translate(-50%,8px)
}
to{
  opacity:1;
  transform:translate(-50%,0)
}
}
.toast.error{
  background:#963f36
}
.noscript{
  position:fixed;
  bottom:0;
  left:0;
  background:#fff0ce;
  color:#7a5c28;
  z-index:500;
  padding:14px;
  width:100%;
  font-size:12px;
  text-align:center
}
.auth-shell{
  min-height:100dvh;
  display:flex
}
.auth-photo{
  width:56%;
  position:relative;
  overflow:hidden;
  isolation:isolate
}
.auth-photo>img{
  width:100%;
  height:100%;
  position:absolute;
  object-fit:cover;
  object-position:56% center;
  z-index:-2
}
.auth-photo:after{
  content:'';
  position:absolute;
  inset:0;
  background:linear-gradient(0deg,#0a303bf5,#113c493d 70%);
  z-index:-1
}
.auth-photo-copy{
  position:absolute;
  bottom:7%;
  left:9%;
  right:7%;
  color:white
}
.auth-photo-copy .eyebrow{
  color:#eed3a1;
  font-size:11px
}
.auth-photo-copy h1{
  font-size:clamp(34px,3.4vw,40px);
  font-weight:800;
  letter-spacing:-.03em;
  line-height:1.08;
  margin:14px 0
}
.auth-photo-copy p{
  font-size:15px;
  color:#daf3f6;
  line-height:1.65
}
.auth-credit{
  font-size:11px;
  color:#acbab6;
  display:block;
  margin-top:30px
}
.auth-form{
  width:44%;
  background:var(--surface);
  min-height:100dvh;
  padding:52px 8% 35px 6%;
  display:flex;
  flex-direction:column;
  justify-content:space-between
}
.auth-form .brand{
  margin-left:0;
  padding-bottom:20px;
  border-bottom:1px solid var(--line)
}
.auth-form-inner{
  margin-top:56px;
  margin-bottom:40px;
  max-width:390px
}
.auth-form input:not([type=checkbox]):not([type=hidden]){
  min-height:46px;
  border-radius:12px
}
.auth-form form .button{
  border-radius:12px
}
.auth-form-inner h2{
  font-size:30px;
  font-weight:800;
  letter-spacing:-.03em;
  margin:6px 0 10px
}
.auth-form-inner>.muted{
  font-size:13px;
  margin-bottom:27px
}
.auth-form form{
  margin:25px 0
}
.auth-form form .button{
  margin-top:8px
}
.auth-trip{
  border-top:1px solid var(--line);
  margin-top:30px;
  padding-top:25px
}
.auth-trip strong{
  display:block;
  font:700 17px/1.3 var(--font-display);
  letter-spacing:-.01em
}
.auth-trip span{
  display:block;
  color:var(--soft);
  font-size:12px;
  margin-top:5px
}
.auth-bottom{
  font-size:12px
}
.simple-auth{
  width:min(530px,calc(100% - 35px));
  margin:10vh auto;
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:24px;
  padding:38px;
  height:fit-content;
  box-shadow:var(--shadow-md)
}
.simple-auth h1{
  font-size:32px
}
.simple-auth>p{
  font-size:13px;
  color:var(--soft)
}
.simple-auth form{
  margin-top:25px
}

@media(min-width:1600px){
  #main:not(.auth-shell){
  padding:28px 44px 64px
}
.hero-card{
  height:400px
}
.hero-content{
  padding:52px
}
.catalog-body{
  padding:25px
}
.topbar{
  padding-left:44px;
  padding-right:44px
}

}

@media(max-width:1250px){
  .sidebar{
  width:220px
}
.update-banner{
  left:calc(230px + 16px);
  max-width:calc(100vw - 230px - 42px)
}
.nav-link{
  font-size:13.5px;
  gap:10px;
  padding:9px 10px
}
.topbar{
  padding:0 22px
}
#main:not(.auth-shell){
  padding:22px 24px 48px
}
.dashboard-grid{
  grid-template-columns:minmax(0,1fr) 245px;
  gap:19px
}
.event-time{
  min-width:80px;
  padding-right:12px
}
.event-card{
  gap:13px;
  padding:18px 15px
}
.event-time strong{
  font-size:12px
}
.event-body h3{
  font-size:17px
}
.event-more{
  display:none
}
.metrics>div{
  padding:0 20px
}
.hero-content{
  padding:35px
}
.hero-count{
  right:20px;
  padding:15px 20px
}
.hero-content h2{
  max-width:470px
}
.route-bar{
  padding-left:12px;
  padding-right:12px
}
.route-bar strong{
  font-size:15px
}
.cards{
  gap:16px
}
.catalog-body{
  padding:18px
}
.catalog-body h3{
  font-size:19px
}
.task-progress{
  gap:20px
}
.task-progress progress{
  max-width:190px
}
.detail-grid{
  grid-template-columns:minmax(0,1fr) 240px
}
.metrics strong{
  font-size:28px
}
.metrics .metric-word{
  font-size:21px
}
.budget-metrics strong{
  font-size:28px
}
.topbar-right{
  gap:10px
}
.toast{
  left:calc(50% + 115px)
}

}

@media(max-width:1030px){
  .dashboard-grid{
  grid-template-columns:1fr
}
.right-column{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:18px
}
.right-column .priorities{
  grid-column:1/-1
}
.priorities h2 br{
  display:none
}
.priorities h2{
  font-size:26px
}
.right-column .panel{
  margin:0
}
.cards.three{
  grid-template-columns:repeat(2,minmax(0,1fr))
}
.hero-count{
  display:none
}
.hero-card{
  height:350px
}
.hero-content h2{
  font-size:43px;
  max-width:450px
}
.hero-content p{
  max-width:330px
}
.route-bar{
  gap:8px;
  flex-wrap:wrap;
  justify-content:flex-start
}
.route-bar>div{
  min-width:84px
}
.route-bar>span{
  font-size:18px
}
.page-heading{
  align-items:start;
  flex-direction:column;
  gap:17px
}
.page-heading h1{
  font-size:28px
}
.page-heading .inline{
  width:100%;
  justify-content:flex-start
}
.metrics{
  grid-template-columns:repeat(2,1fr);
  gap:25px 0
}
.metrics>div:nth-child(2){
  border:0
}
.metrics strong{
  font-size:28px
}
.port-section{
  grid-template-columns:1fr
}
.port-photo .photo img{
  min-height:0;
  max-height:310px;
  aspect-ratio:2/1
}
.port-options{
  gap:20px
}
.port-body{
  padding:27px
}
.port-times{
  justify-content:flex-start
}
.day-banner{
  grid-template-columns:190px 1fr
}
.day-banner>div{
  padding:20px 20px 20px 0
}
.day-intro{
  align-items:start;
  flex-direction:column
}
.day-times{
  text-align:left;
  justify-content:flex-start
}
.detail-grid{
  grid-template-columns:1fr
}
.auth-form{
  padding-left:5%;
  padding-right:5%
}
.auth-photo{
  width:50%
}
.auth-form{
  width:50%
}
.task-progress{
  flex-wrap:wrap
}
.task-progress progress{
  max-width:none
}
.sources-list{
  grid-template-columns:1fr
}
.onboarding{
  flex-direction:column;
  align-items:start
}
.panel{
  padding:21px
}

}

@media(max-width:760px){
  html{
  scroll-padding-top:calc(var(--topbar-h-mobile) + env(safe-area-inset-top) + 12px);
  scroll-padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 16px)
}
/* The sidebar becomes the More sheet: same element, same body.menu-open contract. */
.sidebar{
  top:auto;
  bottom:0;
  left:0;
  right:0;
  width:100%;
  height:auto;
  max-height:min(86dvh,640px);
  transform:translateY(102%);
  border:0;
  border-radius:22px 22px 0 0;
  padding:14px 16px calc(12px + env(safe-area-inset-bottom));
  background:var(--surface);
  box-shadow:0 -12px 40px #0b323433;
  transition:transform var(--dur-slow) var(--ease-spring),visibility 0s linear var(--dur-slow);
  overscroll-behavior:contain;
  visibility:hidden;
  z-index:70
}
.menu-open .sidebar{
  transform:none;
  visibility:visible;
  transition-delay:0s,0s
}
.sidebar::before{
  content:'';
  display:block;
  flex-shrink:0;
  width:36px;
  height:5px;
  border-radius:3px;
  background:var(--line-2);
  margin:0 auto 10px
}
.sidebar .brand,.sidebar .trip-label,.sidebar .nav-link[data-tab]{
  display:none
}
.sidebar nav{
  margin:0 -6px;
  padding:4px 6px 6px;
  -webkit-overflow-scrolling:touch;
  -webkit-mask-image:none;
  mask-image:none
}
.nav-link{
  min-height:48px;
  padding:10px 12px;
  margin:1px 0;
  font-size:15px;
  color:var(--ink);
  border-radius:12px
}
.nav-link.active::before{
  display:none
}
.nav-link .icon{
  width:22px;
  height:22px
}
.nav-section{
  font-size:11px;
  padding:16px 12px 6px
}
.sidebar-bottom{
  padding-top:8px;
  margin-top:8px;
  border-top:1px solid var(--line)
}
.sidebar-bottom>.fine{
  padding:4px 12px 10px
}
.profile{
  min-height:56px;
  padding:10px 6px 0;
  border-top:0
}
.profile .avatar{
  width:36px;
  height:36px;
  min-width:36px;
  font-size:17px
}
.profile strong{
  font-size:14px;
  max-width:none
}
.profile small{
  font-size:12px;
  max-width:none
}
.menu-open .nav-scrim{
  display:block;
  position:fixed;
  inset:0;
  z-index:65;
  background:#102b3766;
  border:0;
  padding:0;
  margin:0;
  animation:fade-in var(--dur) both
}
@keyframes fade-in{
  from{
  opacity:0
}
}
.app-shell{
  margin:0;
  min-height:100dvh
}
/* 52px title bar: 44px back slot | title | sync dot + avatar. */
.topbar{
  min-height:calc(var(--topbar-h-mobile) + env(safe-area-inset-top));
  padding:env(safe-area-inset-top) max(12px,env(safe-area-inset-right)) 0 max(12px,env(safe-area-inset-left));
  gap:8px;
  display:grid;
  grid-template-columns:44px minmax(0,1fr) auto;
  align-items:center;
  border-radius:0;
  background:#f7fbfcf2;
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px)
}
.topbar-spacer{
  display:block;
  width:44px;
  height:44px
}
.topbar-back{
  width:44px;
  height:44px;
  min-width:44px;
  margin:0 0 0 -6px
}
.topbar-title{
  text-align:center
}
.topbar-title strong{
  font-size:16px
}
.topbar-title span{
  display:none
}
.topbar-right{
  gap:8px;
  margin:0;
  min-width:0;
  justify-self:end
}
/* Sync indicator as a dot; the status text stays in the DOM for #sync-state and screen readers, and expands when offline. */
.sync-state{
  position:relative;
  width:12px;
  height:12px;
  padding:0;
  gap:0;
  overflow:hidden;
  white-space:nowrap;
  text-indent:-999px;
  color:transparent;
  background:none;
  border-radius:50%
}
.sync-state:before{
  position:absolute;
  left:2px;
  top:2px;
  width:8px;
  height:8px
}
.sync-state.offline{
  width:auto;
  height:auto;
  max-width:min(46vw,180px);
  min-width:0;
  flex:0 1 auto;
  padding:4px 9px 4px 7px;
  gap:5px;
  text-indent:0;
  color:#8a5424;
  font-size:11px;
  line-height:1.2;
  white-space:normal;
  text-align:left;
  overflow:visible;
  border:1px solid #e9d2b8;
  background:#fff5e6;
  border-radius:12px
}
.sync-state.offline:before{
  position:static;
  width:6px;
  height:6px
}
.account-summary{
  margin:-4px -7px -4px 0
}
.account-summary .avatar{
  width:30px;
  height:30px;
  min-width:30px;
  font-size:14px
}
.account-pop{
  right:-2px;
  width:min(260px,calc(100vw - 24px))
}
/* The chevron in the title bar replaces the in-page back links on phones. */
#main .back-link,#main .email-back{
  display:none
}
/* Bottom tab bar. */
.tabbar{
  position:fixed;
  left:0;
  right:0;
  bottom:0;
  z-index:60;
  display:grid;
  grid-template-columns:repeat(5,1fr);
  height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
  padding:0 max(4px,env(safe-area-inset-right)) env(safe-area-inset-bottom) max(4px,env(safe-area-inset-left));
  background:#f7fbfcf2;
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  border-top:1px solid #074b6814
}
.tab{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:3px;
  min-height:44px;
  border:0;
  background:none;
  color:var(--ink-2);
  font:600 11px/1 var(--font-sans);
  letter-spacing:.01em;
  text-decoration:none;
  padding:5px 0 4px;
  -webkit-tap-highlight-color:transparent;
  touch-action:manipulation;
  transition:color var(--dur-fast),opacity var(--dur-fast)
}
.tab .icon{
  width:24px;
  height:24px;
  transition:transform var(--dur-fast) var(--ease-out)
}
.tab[aria-current="page"],.menu-open .tab-more{
  color:var(--deep)
}
.tab[aria-current="page"] .icon,.menu-open .tab-more .icon{
  stroke-width:2.1
}
.tab:active{
  opacity:.55;
  transition-duration:40ms
}
.tab:active .icon{
  transform:scale(.92)
}
#main:not(.auth-shell){
  padding:22px 18px calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 28px)
}
/* Compact page headers: 30px title, description wraps (never clamped), secondary actions scroll in one row. */
.page-heading{
  gap:12px;
  margin-bottom:18px
}
.page-heading .eyebrow{
  font-size:11px;
  margin-bottom:4px
}
.page-heading h1{
  font-size:26px;
  line-height:1.1
}
.page-heading p{
  font-size:14px;
  line-height:1.5
}
.page-heading>.button,.page-heading>.inline{
  padding-top:0
}
.page-heading .inline.wrap{
  flex-wrap:nowrap;
  overflow-x:auto;
  gap:8px;
  width:calc(100% + max(18px,env(safe-area-inset-left)) + max(18px,env(safe-area-inset-right)));
  min-width:0;
  margin:0 calc(-1 * max(18px,env(safe-area-inset-right))) 0 calc(-1 * max(18px,env(safe-area-inset-left)));
  padding:2px max(18px,env(safe-area-inset-right)) 4px max(18px,env(safe-area-inset-left));
  scroll-snap-type:x proximity;
  scrollbar-width:none;
  -webkit-overflow-scrolling:touch
}
.page-heading .inline.wrap::-webkit-scrollbar{
  display:none
}
.page-heading .inline .button{
  flex:0 0 auto;
  white-space:nowrap;
  scroll-snap-align:start;
  min-height:44px;
  font-size:13px
}
/* The page's primary action floats above the tab bar on list pages (same button, same data-open contract). */
#main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="admin"]) .page-heading .button:not(.secondary){
  position:fixed;
  z-index:58;
  right:max(16px,env(safe-area-inset-right));
  bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 14px);
  min-height:52px;
  padding:0 20px 0 16px;
  border-radius:999px;
  font-size:15px;
  gap:8px;
  box-shadow:0 10px 30px #074b684d,0 2px 6px #074b6833;
  transition:opacity var(--dur-fast),transform 80ms;
  view-transition-name:fab
}
#main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="admin"]) .page-heading .button:not(.secondary) .icon{
  width:22px;
  height:22px
}
#main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="admin"]) .page-heading .button:not(.secondary):active{
  transform:scale(.96)
}
.menu-open #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="admin"]) .page-heading .button:not(.secondary){
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity var(--dur-fast),visibility 0s linear var(--dur-fast)
}
/* Small buttons keep the 44px touch target on phones (this rule must beat .button.small above). */
.button.small,.button.secondary.small{
  min-height:44px;
  padding:8px 14px;
  font-size:13px
}
select:not([multiple]):not([size]){
  height:46px
}
.modal select:not([multiple]):not([size]){
  height:48px
}
#main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="admin"]){
  padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 88px)
}
/* Toasts and the voyage cue sit above the floating action on those pages. */
body:has(#main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="admin"])) .toast{
  bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 80px)
}
.notice,.notice.compact{
  font-size:13px;
  padding:12px 14px;
  border-radius:14px;
  margin-bottom:16px
}
.hero-card{
  height:350px;
  border-radius:20px
}
.hero-content{
  padding:32px 28px
}
.hero-content h2{
  font-size:43px;
  max-width:365px
}
.hero-content p{
  font-size:12px;
  max-width:270px
}
.hero-shade{
  background:linear-gradient(90deg,#072d32e8,#10383a84)
}
.hero-content .button{
  font-size:12px;
  padding:10px 15px;
  min-height:41px
}
.hero-image{
  object-position:62% center
}
.route-bar{
  padding:19px 2px 8px;
  gap:9px;
  display:grid;
  grid-template-columns:repeat(3,1fr);
  margin-bottom:27px
}
.route-bar>span{
  display:none
}
.route-bar>div{
  min-width:0;
  border-left:2px solid var(--line);
  padding-left:10px
}
.route-bar>div:last-child{
  display:none
}
.route-bar strong{
  font-size:14px
}
.dashboard-grid{
  gap:20px
}
.section-heading{
  margin:22px 0 10px
}
.section-heading h2{
  font-size:20px
}
.task-group .section-heading{
  margin:0
}
.section-heading .text-link{
  font-size:12px;
  white-space:nowrap
}
.right-column{
  grid-template-columns:1fr 1fr
}
.right-column .panel{
  padding:21px
}
.right-column .panel h3{
  font-size:18px
}
.right-column .text-link{
  font-size:12px
}
/* Event cards: the time becomes a pill on top so titles keep the full width; the arrow link stays as a 44px target. */
.event-card{
  flex-direction:column;
  gap:8px;
  padding:14px 56px 14px 16px
}
.event-time{
  display:inline-flex;
  align-items:baseline;
  gap:6px;
  width:auto;
  min-width:0;
  max-width:none;
  padding:4px 10px;
  border:0;
  border-radius:999px;
  background:var(--tint);
  color:var(--deep);
  align-self:flex-start
}
.event-time strong{
  font-size:12px
}
.event-time span{
  margin:0;
  font-size:11px;
  color:var(--ink-2)
}
.event-time span::before{
  content:'·';
  margin-right:6px;
  color:var(--line-strong)
}
.event-body h3{
  font-size:17px;
  line-height:1.25;
  margin:4px 0
}
.event-body p{
  font-size:12px
}
.event-body>.inline.wrap{
  gap:6px
}
.event-bottom{
  flex-direction:column;
  align-items:flex-start;
  gap:10px;
  margin-right:-40px
}
.event-more{
  display:inline-flex;
  position:absolute;
  top:8px;
  right:8px;
  width:44px;
  height:44px;
  min-width:44px
}
.rsvp-form{
  width:100%;
  gap:6px
}
.rsvp-form .chip{
  flex:1;
  min-height:40px;
  font-size:12px;
  padding:0 8px
}
.cards.three,.cards.two{
  grid-template-columns:1fr 1fr;
  gap:13px
}
.feature-card>div{
  padding:18px
}
.feature-card h3{
  font-size:19px
}
.feature-card p{
  font-size:12px
}
.feature-card:last-child{
  grid-column:1/-1;
  display:grid;
  grid-template-columns:45% 55%
}
.feature-card:last-child .photo img{
  height:100%;
  min-height:160px
}
.catalog-card .photo img{
  aspect-ratio:4/3
}
.catalog-body{
  padding:16px
}
.catalog-body h3{
  font-size:20px
}
.catalog-body p{
  font-size:13px
}
.catalog-body .button{
  font-size:13px;
  padding:10px 8px
}
.catalog-controls{
  flex-direction:column;
  align-items:stretch;
  gap:10px
}
/* Chip rows, view tabs, admin tabs and day tabs: one snapping row bled to the screen edges, with edge fades.
   app.js adds .at-end so the fade never hides the last item's focus ring. */
#main .filter-pills,#main .day-tabs,#main .admin-tabs{
  display:flex;
  flex-wrap:nowrap;
  gap:8px;
  width:calc(100% + max(18px,env(safe-area-inset-left)) + max(18px,env(safe-area-inset-right)));
  min-width:0;
  overflow-x:auto;
  scroll-snap-type:x proximity;
  scroll-padding:0 18px;
  margin:0 calc(-1 * max(18px,env(safe-area-inset-right))) 14px calc(-1 * max(18px,env(safe-area-inset-left)));
  padding:2px max(18px,env(safe-area-inset-right)) 6px max(18px,env(safe-area-inset-left));
  scrollbar-width:none;
  -webkit-overflow-scrolling:touch;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 28px),transparent);
  mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 28px),transparent)
}
#main .filter-pills::-webkit-scrollbar,#main .day-tabs::-webkit-scrollbar{
  display:none
}
/* The segmented look travels to the phone strip: tinted chips on the page, the selected one white. */
#main .filter-pills{
  background:none;
  border:0;
  border-radius:0
}
.filter-pills .chip{
  background:var(--surface-2);
  border:1px solid var(--line);
  border-radius:999px
}
.filter-pills .chip.selected{
  background:#fff;
  border-color:var(--line);
  color:var(--deep);
  box-shadow:var(--shadow-sm)
}
#main .filter-pills.at-end,#main .day-tabs.at-end{
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 14px);
  mask-image:linear-gradient(90deg,transparent,#000 14px)
}
#main .filter-pills>*,#main .day-tabs>*{
  flex:0 0 auto;
  scroll-snap-align:start
}
.chip{
  min-height:40px;
  padding:0 14px;
  font-size:13px;
  font-weight:600
}
.search-form{
  width:100%
}
.search-form input{
  max-width:none;
  flex:1;
  min-height:44px;
  border-radius:12px
}
.day-tab{
  min-width:92px;
  padding:10px 12px;
  border-radius:14px
}
.day-tab small{
  font-size:12px
}
.day-intro h2{
  font-size:22px
}
.day-banner{
  grid-template-columns:130px 1fr;
  gap:15px
}
.day-banner>div{
  padding:20px 15px 20px 0
}
.day-banner h3{
  font-size:19px
}
.day-banner p{
  font-size:12px
}
.day-banner .photo img{
  min-height:270px
}
.day-times{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  width:100%
}
.day-times span{
  display:block;
  padding:8px 10px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:10px;
  font-size:11px
}
.day-times strong{
  font-size:14px
}
.day-section{
  margin-top:25px
}
.port-options{
  grid-template-columns:1fr;
  padding:25px;
  gap:19px
}
.port-options>div{
  padding-bottom:15px;
  border-bottom:1px solid var(--line)
}
.port-options h3{
  font-size:18px
}
.port-body h2{
  font-size:28px
}
.port-times{
  gap:17px
}
.metrics{
  padding:20px 0;
  border-radius:16px
}
.metrics>div{
  padding:0 19px
}
.metrics span{
  letter-spacing:.08em
}
.metrics strong{
  font-size:28px
}
.metrics .metric-word{
  font-size:21px
}
.budget-metrics strong{
  font-size:28px
}
/* Private banner: icon | family name, then the copy on its own line (the middot separator is hidden). */
.private-banner{
  display:grid;
  grid-template-columns:20px 1fr;
  gap:4px 10px;
  align-items:start;
  font-size:13px;
  padding:12px 14px;
  border-radius:14px
}
.private-banner .icon{
  grid-row:1/3;
  margin-top:2px
}
.private-banner>*:not(.icon){
  grid-column:2
}
.private-banner strong{
  display:block;
  font-size:14px
}
.private-banner .sep{
  display:none
}
.task-progress{
  padding:18px
}
.task-progress h3{
  font-size:20px
}
.task-progress>div{
  width:100%
}
.task-row{
  padding:14px 14px;
  gap:12px
}
.task-actions{
  flex-direction:column;
  gap:0;
  margin:-8px -10px -8px 0;
  opacity:1
}
.task-copy h3{
  font-size:15px
}
.task-copy p{
  font-size:12px
}
.task-copy .fine{
  font-size:12px
}
.task-actions .icon-button{
  height:44px;
  min-width:44px;
  width:44px
}
.notes-grid{
  grid-template-columns:1fr!important
}
.detail-grid{
  grid-template-columns:1fr!important
}
th,td{
  padding:14px
}
/* Data tables marked data-stack become cards; other tables keep scrolling inside .table-wrap. */
.table-wrap[data-stack]{
  border:0;
  border-radius:0;
  background:none;
  overflow:visible
}
.table-wrap[data-stack] table{
  display:block;
  min-width:0
}
.table-wrap[data-stack] thead{
  position:absolute;
  width:1px;
  height:1px;
  overflow:hidden;
  clip:rect(0 0 0 0);
  white-space:nowrap
}
.table-wrap[data-stack] tbody{
  display:grid;
  gap:10px
}
.table-wrap[data-stack] tr{
  display:block;
  background:#fff;
  border:1px solid var(--line);
  border-radius:var(--r-md);
  padding:14px 16px;
  box-shadow:var(--shadow-sm)
}
.table-wrap[data-stack] td{
  display:grid;
  grid-template-columns:42% minmax(0,1fr);
  column-gap:12px;
  align-items:baseline;
  padding:5px 0;
  border:0;
  font-size:14px;
  text-align:right;
  white-space:normal
}
.table-wrap[data-stack] td>*{
  grid-column:2
}
.table-wrap[data-stack] td::before{
  content:attr(data-label);
  grid-column:1;
  grid-row:1;
  font-size:11px;
  font-weight:650;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--soft);
  text-align:left
}
.table-wrap[data-stack] td[data-label='']::before,.table-wrap[data-stack] td:not([data-label])::before{
  content:none
}
.table-wrap[data-stack] td small{
  max-width:none;
  margin-top:2px
}
.table-wrap[data-stack] td:first-child{
  display:block;
  padding:0 0 8px;
  margin-bottom:6px;
  border-bottom:1px solid var(--line);
  text-align:left
}
.table-wrap[data-stack] td:first-child strong{
  font-size:15px;
  min-width:0
}
.table-wrap[data-stack] td:last-child{
  display:block;
  padding:10px 0 0;
  text-align:left
}
.table-wrap[data-stack] td:last-child .inline{
  flex-wrap:wrap;
  gap:8px
}
.table-wrap[data-stack] td.td-actions .inline:not(.wrap){
  justify-content:flex-end
}
.role-cards{
  grid-template-columns:1fr!important
}
.admin-tabs{
  gap:6px
}
.app-footer{
  padding:22px 18px calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 18px);
  flex-direction:column;
  font-size:12px;
  gap:6px
}
.update-banner{
  top:calc(var(--topbar-h-mobile) + env(safe-area-inset-top) + 8px);
  left:max(16px,env(safe-area-inset-left));
  right:max(16px,env(safe-area-inset-right));
  max-width:calc(100vw - 32px);
  border-radius:22px;
  font-size:12px;
  padding:10px 16px
}
.toast{
  left:16px;
  right:16px;
  bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 12px);
  width:auto;
  max-width:none;
  transform:none;
  font-size:13.5px;
  animation:toast-in-sheet var(--dur) var(--ease-out) both
}
@keyframes toast-in-sheet{
  from{
  opacity:0;
  transform:translateY(8px)
}
to{
  opacity:1;
  transform:none
}
}
.dialog-head .icon-button{
  width:44px;
  height:44px;
  min-width:44px
}
/* Dialogs become bottom sheets: the dialog is a flex column, the form (or .sheet-body) scrolls,
   the head and the actions stay put. voyage.css keeps its arrive animation for desktop only. */
.modal{
  position:fixed;
  inset:auto 0 0 0;
  top:auto;
  margin:0;
  width:100%;
  max-width:none;
  max-height:92dvh;
  border:0;
  border-radius:22px 22px 0 0;
  padding:8px 0 0;
  box-shadow:0 -20px 60px #07323444;
  overflow:hidden
}
.modal[open]{
  display:flex;
  flex-direction:column;
  animation:sheet-up var(--dur-slow) var(--ease-spring) both
}
.modal::before{
  content:'';
  flex:0 0 5px;
  width:36px;
  height:5px;
  border-radius:3px;
  background:var(--line-2);
  margin:6px auto 10px
}
.modal>form,.modal>.sheet-body{
  flex:1 1 auto;
  min-height:0;
  overflow:auto;
  overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;
  padding:0 20px 0
}
.modal .dialog-head{
  position:sticky;
  top:0;
  z-index:2;
  background:var(--surface);
  padding:4px 0 8px;
  margin:0 0 8px;
  border-bottom:0;
  align-items:center
}
.modal .dialog-head .icon-button{
  margin:0 -8px 0 0
}
.dialog-head h2{
  font-size:20px;
  margin:0
}
.modal .form-actions{
  position:sticky;
  bottom:0;
  z-index:2;
  margin:20px -20px 0;
  padding:12px 20px calc(12px + env(safe-area-inset-bottom));
  background:var(--surface);
  border-top:1px solid var(--line);
  flex-wrap:nowrap
}
.modal>form,.modal>.sheet-body{
  scroll-padding-top:calc(var(--sheet-head,56px) + 8px);
  scroll-padding-bottom:calc(84px + env(safe-area-inset-bottom))
}
.modal .form-actions .button{
  flex:1;
  min-height:48px;
  padding:11px 12px
}
.modal input:not([type=checkbox]):not([type=hidden]),.modal select,.modal textarea{
  border-radius:12px;
  min-height:48px
}
.modal::backdrop{
  background:#102b37a6;
  -webkit-backdrop-filter:none;
  backdrop-filter:none;
  animation:fade-in var(--dur) both
}
@keyframes sheet-up{
  from{
  transform:translateY(100%)
}
to{
  transform:none
}
}
.form-grid{
  gap:0 13px
}
.form-actions{
  margin-top:18px
}
/* Login: shorter photo, then a rounded form card that overlaps it. */
.auth-shell{
  flex-direction:column
}
.auth-photo{
  width:100%;
  height:min(38dvh,250px);
  min-height:210px
}
.auth-photo-copy{
  left:24px;
  right:24px;
  bottom:40px
}
.auth-photo:after{
  background:linear-gradient(0deg,#0a303bf5 40%,#113c49b3 75%,#113c494d)
}
.auth-photo-copy .eyebrow,.auth-credit{
  text-shadow:0 1px 2px #0d2f3c99
}
.auth-photo-copy .eyebrow{
  font-size:11px;
  margin-bottom:4px
}
.auth-photo-copy h1{
  font-size:32px;
  line-height:1.08;
  margin:8px 0 0
}
.auth-photo-copy p{
  display:none
}
.auth-credit{
  font-size:11px;
  margin-top:6px;
  min-height:32px;
  display:inline-flex;
  align-items:center
}
.auth-form{
  position:relative;
  width:100%;
  min-height:auto;
  margin-top:-24px;
  border-radius:24px 24px 0 0;
  padding:28px 24px calc(28px + env(safe-area-inset-bottom));
  background:var(--surface);
  box-shadow:0 -10px 30px #0a303b1a
}
.auth-form>.brand{
  display:none
}
.auth-form-inner{
  max-width:none;
  margin:0 0 20px
}
.auth-form-inner h2{
  font-size:28px
}
.auth-form-inner>.muted{
  margin-bottom:22px
}
.auth-form label{
  font-size:14px
}
.auth-form input:not([type=checkbox]):not([type=hidden]){
  min-height:50px;
  border-radius:12px;
  font-size:16px
}
.auth-form form{
  margin:18px 0
}
.auth-form form .button{
  min-height:52px;
  border-radius:14px;
  font-size:16px
}
.auth-trip{
  margin-top:22px;
  padding-top:20px
}
.auth-trip strong{
  font-size:22px
}
.auth-trip span,.auth-bottom{
  font-size:12px
}
.auth-bottom{
  margin-top:10px
}
.auth-photo>img{
  object-position:center 38%
}
.simple-auth{
  padding:29px 23px;
  margin-top:8vh
}
.simple-auth h1{
  font-size:28px
}

}

@media(max-width:560px){
  /* Catalog cards go single-column earlier on phones, with 44px actions. */
  .cards.three.catalog{
  grid-template-columns:1fr;
  gap:16px
}
.catalog-card{
  border-radius:18px
}
.catalog-card .photo img{
  aspect-ratio:16/10
}
.catalog-body{
  padding:16px 18px 18px
}
.catalog-body h3{
  font-size:19px
}
.catalog-body p{
  font-size:13px
}
.catalog-body .button{
  min-height:44px;
  font-size:14px;
  border-radius:12px;
  padding:10px 14px
}
.favorite{
  width:44px;
  height:44px;
  margin:-8px -8px 0 0
}
.catalog-meta{
  gap:6px 12px;
  font-size:12px
}

}

@media(max-width:410px){
  .hero-content h2{
  font-size:38px
}
.hero-content{
  padding:29px 23px
}
.hero-card{
  height:330px
}
.cards.three:has(.household-card){
  grid-template-columns:1fr
}
.cards.two:has(.care-card){
  grid-template-columns:1fr
}
.right-column{
  grid-template-columns:1fr
}
.right-column .priorities{
  grid-column:auto
}
.day-banner{
  grid-template-columns:1fr
}
.day-banner .photo img{
  min-height:0;
  max-height:160px;
  aspect-ratio:2/1
}
.day-banner>div{
  padding:7px 21px 22px
}
.section-heading{
  align-items:start;
  flex-direction:column;
  gap:12px
}
.cards.two:not(.notes-grid):not(.detail-grid){
  grid-template-columns:1fr
}
.form-grid{
  grid-template-columns:1fr
}
.metrics strong{
  font-size:26px
}
.budget-metrics strong{
  font-size:26px
}
.page-heading h1{
  font-size:26px
}
.feature-card:last-child{
  display:block
}
.feature-card:last-child .photo img{
  min-height:0
}
.feature-card h3{
  font-size:18px
}
.feature-card>div{
  padding:15px
}

}

/* Press feedback for touch screens; hover rules above are all behind @media(hover:hover). */
@media(hover:none){
  .button.secondary:active,.chip:not(.selected):active,.day-tab:not(.selected):active,.nav-link:active,.icon-button:active{
  background:var(--tint);
  transition:background 40ms
}
.catalog-card:active,.cruise-highlight:active,.cruise-port:active,.cruise-quicklinks a:active,.family-plan-row:active,.feature-card:active{
  transform:scale(.985);
  transition:transform 80ms
}
.task-row:active{
  background:var(--surface-2)
}

}

/* Cross-document view transitions: #main cross-fades with a small lift while the sidebar, top bar, tab bar and footer stay put.
   Browsers without support (Firefox, older Safari/Chrome) ignore the at-rule and navigate instantly. The 8-second poll swaps #main in place and is not a navigation. */
@view-transition{
  navigation:auto
}
#main{
  view-transition-name:main
}
.sidebar{
  view-transition-name:sidebar
}
.topbar{
  view-transition-name:topbar
}
.tabbar{
  view-transition-name:tabbar
}
.app-footer{
  view-transition-name:footer
}
.nav-link.active{
  view-transition-name:nav-active
}
#toast,#voyage-status,.nav-scrim,.modal,.welcome-dialog,.photo-lightbox,.update-banner,.skip-link{
  view-transition-name:none
}
::view-transition-old(root),::view-transition-new(root){
  animation:none
}
::view-transition-group(sidebar),::view-transition-group(topbar),::view-transition-group(tabbar),::view-transition-group(footer),::view-transition-group(fab),::view-transition-group(main){
  animation-duration:0s
}
::view-transition-old(sidebar),::view-transition-new(sidebar),::view-transition-old(topbar),::view-transition-new(topbar),::view-transition-old(tabbar),::view-transition-new(tabbar),::view-transition-old(footer),::view-transition-new(footer),::view-transition-old(fab),::view-transition-new(fab){
  animation:none
}
::view-transition-group(nav-active){
  animation-duration:var(--dur);
  animation-timing-function:var(--ease-out)
}
::view-transition-old(nav-active),::view-transition-new(nav-active){
  animation-duration:var(--dur)
}
::view-transition-old(main){
  animation:vt-out var(--dur-fast) ease-in both
}
::view-transition-new(main){
  animation:vt-in var(--dur) var(--ease-out) both
}
@keyframes vt-out{
  to{
  opacity:0;
  transform:translateY(-6px)
}
}
@keyframes vt-in{
  from{
  opacity:0;
  transform:translateY(8px)
}
}

/* Installed to the Home Screen (display-mode: standalone): no browser chrome, so respect the top safe area and keep the paper background under rubber-band overscroll.
   Every page keeps in-app navigation (tab bar, back chevron, footer links, "Back to the gathering place" on error/link pages). */
@media(display-mode:standalone){
  html{
  background:var(--bg)
}
html:has(.app-shell){
  background:var(--rail-bottom)
}
.auth-shell .auth-photo{
  padding-top:env(safe-area-inset-top)
}
}
@media(display-mode:standalone) and (min-width:761px){
  html{
  scroll-padding-top:calc(var(--topbar-h) + env(safe-area-inset-top) + 26px)
}
.topbar{
  min-height:calc(var(--topbar-h) + env(safe-area-inset-top));
  padding-top:env(safe-area-inset-top)
}
.sidebar{
  padding-top:calc(20px + env(safe-area-inset-top))
}
.update-banner{
  top:calc(var(--topbar-h) + env(safe-area-inset-top) + 20px)
}
}
@media(display-mode:standalone) and (max-width:760px){
  html:has(.app-shell){
  background:var(--bg)
}
}

/* Reduced motion: the global transition kill-switch covers every stylesheet; every keyframe animation added in this polish
   (pop-in, fade-in, sheet-up, toast-in, toast-in-sheet, check-pop, vt-in/vt-out) is listed here and the cross-document transition is turned off. */
@media(prefers-reduced-motion:reduce){
  @view-transition{
  navigation:none
}
::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){
  animation:none!important
}
*{
  scroll-behavior:auto!important;
  transition:none!important
}
html{
  scroll-behavior:auto
}
.sidebar,.nav-scrim,.account-pop,.tab .icon,.modal[open],.modal::backdrop,.welcome-dialog[open],.welcome-dialog::backdrop,.toast,.update-banner,.task-check,.favorite .icon,.page-heading .button,.gallery-photo-link>img{
  animation:none!important
}
.button,.chip,.day-tab,.task-check,.icon-button,.catalog-card,.feature-card,.cruise-highlight,.cruise-port,.cruise-show,.cruise-quicklinks a,.family-plan-row,.tab .icon,.favorite,.nav-link{
  transform:none!important
}

}

@media print{
  .sidebar,.nav-scrim,.tabbar,.topbar,.app-footer,.page-heading>.button,.button,.icon-button,.rsvp-form,.toast,.filter-pills,.day-tabs,.update-banner,.back-link,.skip-link,.account-menu,#voyage-status,.noscript,dialog{
  display:none!important
}
.table-wrap[data-stack] table{
  display:table;
  min-width:0
}
.table-wrap[data-stack] thead{
  position:static;
  width:auto;
  height:auto;
  overflow:visible;
  clip:auto
}
.table-wrap[data-stack] tbody{
  display:table-row-group
}
.table-wrap[data-stack] tr{
  display:table-row;
  border:0;
  box-shadow:none;
  padding:0
}
.table-wrap[data-stack] td{
  display:table-cell;
  padding:8px 10px;
  text-align:left
}
.table-wrap[data-stack] td::before{
  content:none
}
.app-shell{
  margin:0;
  min-height:0;
  border-radius:0;
  background:none;
  box-shadow:none
}
#main:not(.auth-shell){
  padding:0;
  max-width:none
}
body,html{
  background:white;
  font-size:12px
}
.event-card,.panel,.catalog-card{
  break-inside:avoid;
  box-shadow:none
}
.hero-card{
  height:240px
}
.cards.three{
  grid-template-columns:repeat(3,1fr)
}
.photo figcaption{
  font-size:10px
}
.day-section{
  break-inside:avoid
}
.metrics{
  padding:15px 0
}
.table-wrap{
  overflow:visible
}
a{
  color:inherit;
  text-decoration:none
}
.notice{
  border:1px solid #bbb
}
.hero-count{
  display:none
}
.dashboard-grid{
  display:block
}
.right-column{
  display:none
}

}

/* List/detail pages read as a tight app on desktop; home, explore, dining, ports and sources keep their editorial sizes. */
@media(min-width:761px){
  /* Working pages: the top bar already names the page, so the eyebrow goes and the h1 is a 28px/700 app title. */
  #main:is([data-page="plan"],[data-page="calendar"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="emails"],[data-page="account"],[data-page="crew"],[data-page="sources"],[data-page="activity"]) .page-heading>div>.eyebrow{display:none}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .page-heading{margin-bottom:22px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .page-heading h1{font-size:28px;margin-bottom:6px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .panel{padding:20px 22px;border-radius:16px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .section-heading{margin:28px 0 14px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .section-heading h2{font-size:22px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .task-group .section-heading{margin:0}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .task-group .section-heading h2{font-size:12px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .metrics{padding:18px 0}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .metrics strong{font-size:30px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .metrics .metric-word{font-size:22px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .budget-metrics strong{font-size:30px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .details-list{grid-template-columns:120px 1fr;font-size:14px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .comment{padding:16px 0}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .detail-grid{gap:20px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .audit-list{max-height:480px}
  #main:is([data-page="plan"],[data-page="checklist"],[data-page="packing"],[data-page="budget"],[data-page="notes"],[data-page="family"],[data-page="admin"],[data-page="account"],[data-page="crew"]) .audit-row{padding:10px 0}
}

/* Photo-credit links remain separate from feature links: valid, accessible markup. */
.feature-card h3 a {
   color: inherit;
   text-decoration: none;
   
}

@media(hover:hover){
  .feature-card h3 a:hover{text-decoration:underline;text-underline-offset:4px}
}

/* Family home and delegated account management. */
.badge.family_head{background:#e1ece0;color:#376043}
.family-heads{display:flex;flex-wrap:wrap;gap:7px;margin:14px 0}
.family-heads .badge{white-space:normal;overflow-wrap:anywhere}
#main[data-page="family"] .page-heading h1{overflow-wrap:anywhere}
.view-tabs{margin:0 0 22px;flex-wrap:wrap}
.family-welcome{display:flex;justify-content:space-between;align-items:center;gap:30px;padding:30px}
.family-welcome h2{font-size:26px}
.family-welcome>div:first-child{max-width:640px}
.family-welcome p{margin-bottom:0}
.family-travel-counts{border-left:1px solid var(--line);padding-left:28px;min-width:220px}
.family-travel-counts>strong{display:block;font:800 34px/1.2 var(--font-display);letter-spacing:-.03em;white-space:nowrap}
.family-travel-counts strong small{font:12px var(--font-sans);color:var(--soft)}
.family-travel-counts strong>span{font-size:22px;color:var(--line-strong)}
.family-travel-counts>span{display:block;font-size:11px;letter-spacing:.06em;text-transform:uppercase;margin-top:12px}
.family-travel-counts p{font-size:12px;margin-top:4px}
.family-dashboard{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:28px;align-items:start}
.family-main,.family-side{min-width:0}
.family-first-heading{margin-top:12px;align-items:start;flex-wrap:wrap}
.family-first-heading h2{font-size:22px}
.family-roster{padding:7px 24px 16px}
.family-list-label{font:650 11px/1.5 var(--font-sans);letter-spacing:.07em;text-transform:uppercase;color:var(--soft);margin:20px 0 6px}
.family-person{display:flex;gap:13px;padding:17px 0;border-bottom:1px solid var(--line);align-items:flex-start}
.family-person:last-child{border-bottom:0}
.family-person-copy{min-width:0;flex:1}
.family-person-copy strong{font-size:13px;overflow-wrap:anywhere}
.family-person-copy>small{display:block;font-size:11px;color:var(--soft);margin:3px 0;overflow-wrap:anywhere}
.family-account-state{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:7px}
.family-account-state .badge{font-size:11px;padding:2px 7px}
.family-account-state .fine{font-size:12px}
.family-person-actions{gap:14px;margin-top:10px}
.family-person-actions .text-button{font-size:12px}
.family-list-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:5px}
.family-list-heading .fine{font-size:12px}
.family-roster-empty{padding:15px 0 7px;margin:0}
.family-list-empty{padding:25px}
.family-list-empty h3{font-size:18px}
.family-list-empty p{color:var(--soft);font-size:12px;margin:0}
.family-browse-link{margin-top:17px}
.family-task-preview .task-row{padding:18px 20px}
.family-plan-list{padding:8px 24px 23px}
.family-plan-list .family-list-empty{padding:20px 0 8px}
.family-plan-row{display:flex;align-items:center;justify-content:space-between;gap:20px;text-decoration:none;color:var(--ink);padding:19px 0;border-bottom:1px solid var(--line)}
@media(hover:hover){.family-plan-row:hover strong{text-decoration:underline;text-underline-offset:4px}}
.family-plan-row>span{min-width:0}
.family-plan-row small{display:block;color:var(--teal);font-size:12px;margin-bottom:5px}
.family-plan-row strong{display:block;font:650 17px/1.3 var(--font-display);letter-spacing:-.01em;overflow-wrap:anywhere}
.family-plan-row .fine{font-size:12px}
.family-side{padding-top:12px}
.family-side h2{font-size:22px}
.family-progress-item+.family-progress-item{border-top:1px solid var(--line);padding-top:20px;margin-top:22px}
.family-progress-item .progress-label{gap:10px;margin-top:22px}
.family-progress-item .progress-label strong{font-size:12px}
.family-progress-item progress{width:100%;margin:10px 0 15px}
.family-progress-item .text-link{font-size:12px}
.family-shortcuts>a{display:flex;align-items:center;gap:11px;color:var(--ink);padding:15px 0;text-decoration:none;border-bottom:1px solid var(--line)}
.family-shortcuts>a:last-child{border-bottom:0;padding-bottom:0}
.family-shortcuts>a>span:nth-child(2){flex:1;min-width:0}
.family-shortcuts .icon-circle{width:35px;height:35px;min-width:35px}
.family-shortcuts strong{font-size:13px;display:block}
.family-shortcuts small{display:block;font-size:12px;color:var(--soft);line-height:1.5;margin-top:3px}
@media(hover:hover){.family-shortcuts>a:hover strong{text-decoration:underline;text-underline-offset:3px}}
.family-shortcuts>a>.icon{width:16px}
.family-note-link{display:block;min-height:44px;text-decoration:none;padding:14px 0;border-bottom:1px solid var(--line)}
.family-note-link:last-child{border:0;padding-bottom:0}
.family-note-link strong{display:block;font-size:12px;overflow-wrap:anywhere}
.family-note-link small{display:block;color:var(--soft);font-size:12px;margin-top:4px}
@media(hover:hover){.family-note-link:hover strong{text-decoration:underline}}
.family-unassigned{text-align:center;padding-bottom:30px}
.family-unassigned>.empty{border:0;background:none;margin:0;padding-bottom:22px}
.family-unassigned>.fine{margin:0 auto;max-width:500px}
.traveler-pill small{display:block;font-size:12px;color:var(--soft)}
.household-members .person-pill{flex-wrap:wrap}
.household-members .person-pill .badge{font-size:11px}
.note-card[id]{scroll-margin-top:100px}
.google-signin{display:inline-flex;vertical-align:middle;border-radius:5px;min-height:44px;text-decoration:none;max-width:100%}
.google-signin img{display:block;width:198px;height:44px;max-width:100%;object-fit:contain}
@media(hover:hover){.google-signin:hover{box-shadow:0 1px 4px #1f1f1f24}}
.google-entry{margin:24px 0 17px;text-align:center}
.google-entry .fine{max-width:330px;margin:12px auto 0;font-size:12px}
.auth-divider{display:flex;gap:12px;align-items:center;color:var(--soft);font-size:12px}
.auth-divider:before,.auth-divider:after{content:'';height:1px;background:var(--line);flex:1}
.auth-divider+form{margin-top:22px}
.account-google{border-top:1px solid var(--line);padding-top:20px;margin:23px 0}
.account-google h3{font-size:18px}
.account-google strong{overflow-wrap:anywhere}
.google-help{margin-top:15px}
@media(max-width:760px){.cards.two.account-panels{grid-template-columns:1fr}.google-entry{margin-top:22px}.auth-form-inner:has(.google-entry){margin-top:0}}
@media(max-width:1200px){.family-dashboard{grid-template-columns:minmax(0,1fr) 270px;gap:20px}.family-welcome{padding:25px}.family-welcome h2{font-size:24px}.family-travel-counts{min-width:185px;padding-left:22px}.family-travel-counts>strong{font-size:30px}}
@media(max-width:1030px){.family-dashboard{grid-template-columns:1fr}.family-side{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding-top:0}.family-side>.panel{margin:0}.family-side>.text-link{grid-column:1/-1}.family-welcome{align-items:flex-start;gap:24px}.family-travel-counts{min-width:170px}.family-travel-counts>strong{font-size:28px}}
@media(max-width:760px){.family-welcome{display:block;padding:23px}.family-welcome h2{font-size:24px}.family-travel-counts{border-left:0;border-top:1px solid var(--line);padding:19px 0 0;margin-top:20px}.family-travel-counts>strong{font-size:32px}.family-travel-counts>span{margin-top:8px}.family-roster{padding:7px 18px 13px}.family-side{grid-template-columns:1fr;gap:18px}.family-first-heading{gap:15px}.family-first-heading .inline.wrap{gap:8px}.family-person{gap:11px}.family-person .avatar{width:32px;min-width:32px;height:32px;font-size:16px}.family-person-actions{column-gap:14px;row-gap:4px}.family-person-copy .inline{gap:7px}.family-list-empty{padding:22px 19px}.family-plan-list{padding:6px 20px 20px}.family-task-preview .task-row{padding:17px 15px}}

.privacy-page{width:min(720px,calc(100% - 35px));margin:6vh auto}.privacy-page h1{font-size:32px}.privacy-page h2{font-size:22px;margin-top:28px}.privacy-page p{font-size:14px;line-height:1.8}.privacy-page>.button{margin-top:12px}.auth-bottom a{display:inline-block;margin-top:5px}

/* One shared Google calendar. */
.calendar-overview{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:40px;padding:32px}
.calendar-overview-copy>.icon-circle{margin-bottom:17px;width:46px;height:46px}
.calendar-overview-copy>.inline{margin-bottom:14px}
.calendar-overview-copy h2{font-size:26px}
.calendar-overview-copy>p{max-width:660px}
.calendar-overview-copy>.button{margin-top:5px}
.calendar-link-help{margin-top:15px;max-width:540px!important;font-size:12px!important}
.calendar-link-help strong{overflow-wrap:anywhere}
.calendar-facts{margin:0;padding-left:28px;border-left:1px solid var(--line);align-self:stretch}
.calendar-facts>div{padding:13px 0;border-bottom:1px solid var(--line)}
.calendar-facts>div:first-child{padding-top:4px}
.calendar-facts>div:last-child{border:0;padding-bottom:0}
.calendar-facts dt{font-size:11px;color:var(--soft)}
.calendar-facts dd{font-size:14px;line-height:1.5;margin:5px 0 0;font-weight:600;overflow-wrap:anywhere}
.calendar-scope-cards{margin-top:24px;margin-bottom:0}
.calendar-scope-cards .panel{margin-bottom:20px}
.calendar-error p{margin:6px 0 0;font-size:13px}
.calendar-controls{margin-top:28px}
.calendar-controls>.section-heading{margin-top:0;align-items:center}
.calendar-control-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:35px;margin-top:25px;align-items:start}
.calendar-control-grid .check-label{font-size:12px}
.calendar-permissions{background:var(--tint);border-radius:14px;padding:23px}
.calendar-permissions h3{font-size:18px}
.calendar-permissions p{font-size:12px}
.calendar-permissions .fine{font-size:12px}
.calendar-disconnect{display:flex;gap:25px;align-items:center;justify-content:space-between;border-top:1px solid var(--line);padding-top:25px;margin-top:30px}
.calendar-disconnect h3{font-size:18px}
.calendar-disconnect .fine{max-width:600px;margin-bottom:0}
.calendar-disconnect form{flex-shrink:0}
.calendar-reconnect{margin-top:25px;border-top:1px solid var(--line);padding-top:20px}
.calendar-reconnect summary{cursor:pointer;color:var(--teal);font-weight:600;font-size:12px}
.calendar-reconnect>p{margin-top:14px}
@media(max-width:1030px){.calendar-overview{grid-template-columns:1fr;gap:22px;padding:25px}.calendar-facts{padding:19px 0 0;border-left:0;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:15px 22px}.calendar-facts>div{padding:0;border:0}.calendar-facts>div:first-child{padding:0}.calendar-control-grid{gap:23px}.calendar-disconnect{align-items:flex-start;flex-direction:column}}
@media(max-width:760px){.calendar-overview{padding:23px}.calendar-overview-copy h2{font-size:24px}.calendar-overview-copy>.button{width:100%;font-size:12px;padding:12px}.cards.two.calendar-scope-cards{grid-template-columns:1fr}.calendar-scope-cards .panel{margin-bottom:4px}.calendar-scope-cards{margin-bottom:20px}.calendar-control-grid{grid-template-columns:1fr;gap:25px}.calendar-controls h2{font-size:22px}.calendar-permissions{padding:21px}.calendar-disconnect{gap:14px}}

/* Cruise welcome: photography, a browsable guide and the family planner. */
.cruise-welcome{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:0 0 17px}
.cruise-welcome .eyebrow{margin:0}.cruise-welcome .text-link{font-size:12px}
.cruise-hero{position:relative;isolation:isolate;min-height:540px;overflow:hidden;border-radius:24px;background:#153f56;color:white;display:flex;align-items:center}
.cruise-hero-image,.cruise-hero-shade{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}.cruise-hero-image{object-position:57% center}.cruise-hero-shade{z-index:-1;background:linear-gradient(90deg,#082e43ee 0%,#082e43a3 44%,#082e430a 85%),linear-gradient(0deg,#082e4388,transparent 35%)}
.cruise-hero-content{padding:62px 54px;max-width:680px}.cruise-kicker{font-size:11px;font-weight:700;letter-spacing:.14em;color:var(--sun)}.cruise-hero h1{font-size:clamp(46px,5vw,73px);line-height:1.02;letter-spacing:-.03em;margin:23px 0}.cruise-hero-content p{max-width:435px;font-size:16px;line-height:1.75;color:#ffffffeb}.cruise-hero-actions{display:flex;gap:24px;align-items:center;flex-wrap:wrap;margin-top:26px}.cruise-hero-link{color:white;font-weight:600;font-size:13px;text-decoration:none}.cruise-countdown{position:absolute;right:32px;bottom:43px;text-align:center;background:#113945c9;border:1px solid #ffffff45;backdrop-filter:blur(8px);border-radius:100px;width:112px;height:112px;display:flex;flex-direction:column;justify-content:center}.cruise-countdown strong{font:800 42px/1 var(--font-display);letter-spacing:-.04em}.cruise-countdown span{font-size:11px;margin-top:8px}.cruise-hero-credit{position:absolute;right:20px;bottom:10px;color:#ffffffd9;font-size:11px}
.cruise-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));background:#fff;border:1px solid var(--line);border-radius:16px;margin:18px 0 0;padding:23px 8px}.cruise-facts>div{padding:0 19px;border-right:1px solid var(--line)}.cruise-facts>div:last-child{border:0}.cruise-facts span{display:block;font-size:11px;letter-spacing:.12em;color:var(--soft);margin-bottom:5px;font-weight:700}.cruise-facts strong{font-size:12px}.cruise-route{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:27px 8px 20px;border-bottom:1px solid var(--line)}.cruise-route a{display:flex;flex-direction:column;justify-content:center;min-height:44px;text-decoration:none;color:var(--ink)}.cruise-route small{font-size:11px;letter-spacing:.09em;color:var(--teal);font-weight:700}.cruise-route strong{font-size:12px;margin:5px 0 0}.cruise-route a>span{font-size:12px;color:var(--soft)}.cruise-route>span{color:var(--coral);font-size:23px}
.cruise-section{margin-top:62px}.cruise-section-head{display:flex;justify-content:space-between;gap:35px;align-items:flex-end;margin-bottom:25px}.cruise-section-head h2{font-size:24px;max-width:610px;margin:6px 0 0;line-height:1.16}.cruise-section-head>p{flex:0 1 330px;color:var(--soft);font-size:13px;margin:0}.cruise-highlights{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:23px}.cruise-highlight{background:white;border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:var(--shadow-sm)}.cruise-highlight .photo img{height:215px;object-fit:cover}.cruise-highlight>div{padding:21px 23px 25px}.cruise-highlight h3{font-size:18px;margin:8px 0 10px}.cruise-highlight h3 a,.cruise-port h3 a{color:var(--ink);text-decoration:none}.cruise-highlight p{font-size:13px;color:var(--soft);line-height:1.7}.cruise-highlight .text-link{font-size:12px}.cruise-highlight .photo figcaption,.cruise-port .photo figcaption{padding:12px 12px 6px}
.cruise-shows{background:#173d49;color:#fff;padding:38px;border-radius:22px}.cruise-shows .eyebrow{color:var(--sun)}.cruise-shows .cruise-section-head>p{color:#daf3f6}.cruise-show-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.cruise-show{position:relative;overflow:hidden;min-height:250px;padding:29px 20px 24px;background:linear-gradient(135deg,#ffffff14,#ffffff04);border:1px solid #ffffff29;border-radius:12px;text-decoration:none;color:white;display:flex;flex-direction:column}.cruise-show:nth-child(2){background:linear-gradient(145deg,#137b844a,#1d495c)}.cruise-show:nth-child(3){background:linear-gradient(145deg,#5f67825c,#233e54)}.cruise-show:nth-child(4){background:linear-gradient(145deg,#a5764d40,#28464c)}.cruise-show-number{font:800 70px/1 var(--font-display);letter-spacing:-.04em;color:#ffffff12;position:absolute;right:12px;top:5px}.cruise-show small{position:relative;font-size:11px;letter-spacing:.1em;color:var(--sun)}.cruise-show h3{font-size:24px;position:relative;margin:28px 0 15px}.cruise-show p{font-size:12px;color:#e0e8e8;line-height:1.65;flex:1}.cruise-show .text-link{color:var(--sun);font-size:12px}.cruise-show{transition:border-color var(--dur-fast),transform var(--dur) var(--ease-out)}@media(hover:hover){.cruise-show:hover{border-color:#e9cb8d;transform:translateY(-2px)}}.cruise-shows-foot{display:flex;justify-content:space-between;gap:20px;margin-top:23px;font-size:12px;color:#daf3f6}.cruise-shows-foot a{color:var(--sun)}
.cruise-port-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:23px}.cruise-port{overflow:hidden;border-radius:17px;border:1px solid var(--line);background:white}.cruise-port .photo img{height:210px;object-fit:cover}.cruise-port>div{padding:22px}.cruise-port h3{font-size:20px;margin-top:8px}.cruise-port p{font-size:13px;color:var(--soft)}.cruise-port .text-link{font-size:12px}
.cruise-value{display:grid;grid-template-columns:1.1fr 1fr 1fr;gap:30px;background:var(--sand-tint);border:1px solid var(--line);border-radius:20px;padding:34px}.cruise-value h2{font-size:24px;margin-top:8px}.cruise-value p{font-size:13px;color:var(--ink-2)}.cruise-value h3{font-size:18px;margin:17px 0}.cruise-value-list{padding-left:25px;border-left:1px solid var(--line-2)}.cruise-value-list ul{padding-left:17px;font-size:12px;line-height:1.8}.cruise-value-list li{margin-bottom:7px}.cruise-value-note{grid-column:1/-1;margin:0!important;font-size:12px!important;border-top:1px solid var(--line-2);padding-top:16px}.cruise-value .text-link{font-size:12px}
.cruise-directory-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:start;margin-bottom:18px}.cruise-directory details{background:#fff;border:1px solid var(--line);border-radius:16px}.cruise-directory summary{cursor:pointer;padding:19px;font-weight:650;font-size:13px}.cruise-directory summary span{display:block;font-size:12px;color:var(--soft);font-weight:400;margin:5px 0 0 16px}.cruise-directory ul{padding:0 21px 17px 35px;margin:0;font-size:12px;line-height:1.8}.cruise-directory li{margin-bottom:5px}.cruise-directory>.fine{font-size:12px}.cruise-quicklinks{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:25px 0 32px}.cruise-quicklinks a{padding:22px;background:#fff;border:1px solid var(--line);border-radius:14px;text-decoration:none;color:var(--ink)}.cruise-quicklinks svg{display:block;color:var(--teal);margin-bottom:12px}.cruise-quicklinks strong{display:block;font-size:14px}.cruise-quicklinks span{display:block;font-size:12px;color:var(--soft);margin-top:5px}@media(hover:hover){.cruise-quicklinks a:hover{border-color:var(--teal)}}
.catalog-card[id],.port-section[id]{scroll-margin-top:110px}.catalog-card:target{outline:3px solid var(--coral);outline-offset:4px}.catalog-card:not(:has(>.photo)){border-top:5px solid #a5bfba}.catalog-body>.source-link{display:inline-block;margin:2px 0 16px}.lounge-directory{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.lounge-directory>div{padding:17px 19px;border:1px solid var(--line);border-radius:12px;background:white}.lounge-directory h3{font-size:17px}.lounge-directory p{font-size:12px;color:var(--soft);margin:0}
@media(max-width:1100px){.cruise-hero-content{padding:48px 35px}.cruise-hero{min-height:490px}.cruise-highlights,.cruise-port-grid{gap:16px}.cruise-highlight>div{padding:20px}.cruise-section-head{gap:22px}.cruise-shows{padding:27px}.cruise-show-grid{gap:10px}.cruise-show{padding:25px 15px 20px}.cruise-show h3{font-size:22px}.cruise-facts>div{padding:0 12px}.cruise-value{padding:26px;gap:20px}}
@media(max-width:760px){.cruise-hero{min-height:510px;border-radius:18px;align-items:flex-end}.cruise-hero-content{padding:35px 27px 75px;max-width:550px}.cruise-hero h1{font-size:49px}.cruise-hero-image{object-position:65% center}.cruise-hero-shade{background:linear-gradient(0deg,#082e43f5,#082e4399 63%,#082e4333)}.cruise-hero-content p{font-size:14px;max-width:340px}.cruise-countdown{width:auto;height:auto;border:0;background:none;backdrop-filter:none;left:27px;right:auto;bottom:20px;border-radius:0;flex-direction:row;align-items:baseline;gap:9px}.cruise-countdown strong{font-size:25px}.cruise-countdown span{font-size:11px}.cruise-hero-credit{bottom:18px;right:17px;max-width:130px;text-align:right}.cruise-facts{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:20px;padding:16px 4px}.cruise-facts>div:nth-child(2){border-right:0}.cruise-facts strong{font-size:12px}.cruise-route{display:flex;justify-content:flex-start;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding:0 18px;margin:0 calc(-1 * max(18px,env(safe-area-inset-right))) 0 calc(-1 * max(18px,env(safe-area-inset-left)));padding:18px max(18px,env(safe-area-inset-right)) 8px max(18px,env(safe-area-inset-left));border-bottom:0;scrollbar-width:none;-webkit-overflow-scrolling:touch}.cruise-route::-webkit-scrollbar{display:none}.cruise-route a{flex:0 0 46%;scroll-snap-align:start;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px}.cruise-route>span{display:none}.cruise-route strong{font-size:13px}.cruise-section{margin-top:34px}.cruise-section-head{display:block;margin-bottom:21px}.cruise-section-head h2{font-size:24px}.cruise-section-head>p,.cruise-section-head>.text-link,.cruise-section-head>.button{margin-top:15px;display:block}.cruise-highlights{grid-template-columns:repeat(2,minmax(0,1fr))}.cruise-highlight .photo img{height:170px}.cruise-highlight h3{font-size:18px}.cruise-shows{padding:26px 21px}.cruise-show-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.cruise-show{min-height:237px}.cruise-shows-foot{display:block;line-height:1.8}.cruise-shows-foot>a{display:block;margin-top:12px}.cruise-port-grid{grid-template-columns:1fr}.cruise-port .photo img{height:240px}.cruise-value{grid-template-columns:1fr;padding:25px;gap:23px}.cruise-value-list{border-left:0;border-top:1px solid var(--line-2);padding:23px 0 0}.cruise-value-note{grid-column:auto}.cruise-directory-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.cruise-quicklinks{grid-template-columns:repeat(2,minmax(0,1fr))}.cruise-quicklinks a{padding:20px}.lounge-directory{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.cruise-welcome{gap:10px}.cruise-hero h1{font-size:43px}.cruise-hero-content{padding-left:23px;padding-right:23px}.cruise-hero-actions{gap:17px}.cruise-hero-actions .button{padding:12px 16px;font-size:12px}.cruise-hero-link{font-size:12px}.cruise-highlights{grid-template-columns:1fr;gap:20px}.cruise-highlight .photo img{height:215px}.cruise-highlight h3{font-size:19px}.cruise-highlight>div{padding:21px 23px 25px}.cruise-show{padding:22px 14px 20px;min-height:248px}.cruise-show h3{font-size:22px}.cruise-show p{font-size:12px}.cruise-port .photo img{height:205px}.cruise-directory-grid{grid-template-columns:1fr}.cruise-quicklinks{gap:11px}.cruise-quicklinks a{padding:18px 15px}.cruise-quicklinks strong{font-size:13px}.lounge-directory{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* Touch-friendly family counts and iPhone form layouts. */
.count-field{border:0;padding:0;margin:0;min-width:0}.count-field legend{padding:0;margin-bottom:7px;font-size:13px;font-weight:600}.count-stepper{display:grid;grid-template-columns:46px minmax(0,1fr) 46px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:#fff;overflow:hidden;align-items:stretch;max-width:280px}.count-stepper button{min-height:46px;border:0;background:#edf3ed;color:var(--ink);font-size:23px;line-height:1;font-weight:500;padding:0}@media(hover:hover){.count-stepper button:hover{background:#dceae1}}.count-stepper button:active{background:#d3e3d8}.count-stepper input[type="number"]{border:0;border-radius:0;text-align:center;min-width:0;width:100%;font-size:17px;font-weight:600;appearance:textfield;padding:10px 4px;margin:0}.count-stepper input::-webkit-inner-spin-button,.count-stepper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.count-stepper:focus-within{outline:2px solid var(--teal);outline-offset:2px}.count-stepper button:focus-visible,.count-stepper input:focus-visible{outline-offset:-3px}.catalog-hint{color:var(--soft);font-size:12px;margin-bottom:23px}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.form-grid>*{min-width:0}input,select,textarea{max-width:100%;min-width:0}
@media(max-width:760px){input:not([type="checkbox"]):not([type="hidden"]),select,textarea,button,input[type="time"],input[type="date"]{font-size:16px}input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),select{min-height:46px}.form-grid{grid-template-columns:1fr;gap:15px}.count-stepper{max-width:none;grid-template-columns:48px minmax(0,1fr) 48px}.count-field legend{font-size:14px}.button,.icon-button,.text-button,.family-person-actions button,.family-person-actions a,.filter-pills .chip{min-height:44px}.family-person-actions{gap:7px 12px}.family-person-actions button,.family-person-actions a{font-size:13px;padding:8px 4px;display:inline-flex;align-items:center}.family-person-actions form{display:flex}.modal label,.modal legend{font-size:14px}.search-form{min-width:0}.search-form input{min-width:0;flex:1}.catalog-controls{max-width:100%;min-width:0}#main:not(.auth-shell){padding-left:max(18px,env(safe-area-inset-left));padding-right:max(18px,env(safe-area-inset-right))}}
@media(max-width:480px){.modal .dialog-head{gap:12px}.inline-form{flex-wrap:wrap}.inline-form>label{min-width:0;flex:1 1 100%}.search-form{width:100%}.catalog-controls .search-form .button{font-size:13px;padding-left:14px;padding-right:14px}}

/* Dining and shore photo galleries: local assets with an ordinary-link fallback. */
.gallery-photo{margin:0;background:var(--tint)}.gallery-photo-link{display:block;position:relative;overflow:hidden;isolation:isolate;aspect-ratio:8/5;color:white;background:var(--line)}.gallery-photo-link>img{display:block;width:100%;height:100%;aspect-ratio:8/5;object-fit:cover;transition:transform .2s ease}@media(hover:hover){.gallery-photo-link:hover>img{transform:scale(1.025)}}.gallery-photo-link:focus-visible{outline-offset:-5px}.gallery-photo-action{position:absolute;right:13px;bottom:13px;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:10px 14px;border:1px solid #ffffff75;border-radius:30px;background:#143b44e8;box-shadow:0 2px 12px #15374326;color:#fff;font-size:12px;font-weight:600}.gallery-photo-action svg{flex-shrink:0}.gallery-photo figcaption{display:flex;align-items:start;justify-content:space-between;gap:12px;margin:0;padding:11px 15px;color:#53676c;background:#f0f4ef;font-size:12px;line-height:1.55}.gallery-photo figcaption>span{min-width:0;overflow-wrap:anywhere}.gallery-photo figcaption>a{color:#306469;white-space:nowrap;flex-shrink:0;text-underline-offset:3px}.catalog-card>.gallery-photo{border-bottom:1px solid var(--line)}.catalog-card>.gallery-photo .gallery-photo-link>img{aspect-ratio:8/5}.port-gallery-options{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:23px;background:#f7f8f1}.shore-option{background:#fff;border:1px solid #dce5dc;border-radius:14px;overflow:hidden;min-width:0;scroll-margin-top:100px}.shore-option:target{outline:3px solid var(--coral);outline-offset:4px}.shore-option-copy{padding:21px}.shore-option-copy h3{margin-top:8px;font-size:20px}.shore-option-copy p{margin-bottom:16px}.shore-option-copy .text-link{font-size:12px}.port-gallery-options>.full-row{border:0;padding:0}.port-gallery-options .gallery-photo figcaption{font-size:11px}.port-gallery-options .gallery-photo figcaption>a{white-space:normal}.photo-gallery-open{overflow:hidden}
.photo-lightbox{position:fixed;width:min(1100px,calc(100vw - 36px));height:min(900px,calc(100dvh - 36px));max-width:calc(100vw - 36px);max-height:calc(100dvh - 36px);margin:auto;padding:0;border:1px solid var(--line);border-radius:19px;background:var(--surface);color:var(--ink);box-shadow:0 24px 100px #082c4770;overflow:hidden}.photo-lightbox[open]{display:flex;flex-direction:column}.photo-lightbox::backdrop{background:#092b38dc;backdrop-filter:blur(5px)}.photo-lightbox-header{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-shrink:0;padding:21px 27px;border-bottom:1px solid var(--line)}.photo-lightbox-header>div{min-width:0}.photo-lightbox-header .eyebrow{font-size:11px;margin:0 0 5px}.photo-lightbox-header h2{font-size:22px;line-height:1.15;margin:0;overflow-wrap:anywhere}.photo-lightbox-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;min-width:46px;min-height:46px;border:1px solid var(--line-2);border-radius:50%;color:var(--ink);background:var(--surface-2);font-size:30px;line-height:1}@media(hover:hover){.photo-lightbox-close:hover{background:var(--tint)}}.photo-lightbox-figure{display:flex;flex-direction:column;margin:0;flex:1;min-height:0;overflow:hidden}.photo-lightbox-stage{position:relative;display:flex;align-items:center;justify-content:center;flex:1;min-height:100px;overflow:hidden;background:#102e37}.photo-lightbox-stage>img{display:block;width:100%;height:100%;min-height:0;object-fit:contain}.photo-lightbox-stage>img[hidden]{display:none}.photo-load-status{color:#eaf1f3;padding:25px;font-size:14px;line-height:1.6;margin:0;text-align:center}.photo-lightbox-caption{flex-shrink:0;max-height:23dvh;overflow:auto;overscroll-behavior:contain;padding:17px 27px 15px;border-bottom:1px solid var(--line);background:var(--surface)}.photo-lightbox-caption>p{margin:0 0 8px;font-size:14px;line-height:1.55;overflow-wrap:anywhere}.photo-lightbox-attribution{display:flex;align-items:baseline;flex-wrap:wrap;gap:5px 16px;font-size:12px;line-height:1.6;color:var(--soft)}.photo-lightbox-attribution>span{overflow-wrap:anywhere}.photo-lightbox-attribution a{color:var(--teal-text)}.photo-lightbox-controls{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:20px;flex-shrink:0;padding:15px 27px 8px}.photo-lightbox-controls .button{min-width:115px;min-height:44px;gap:10px;font-size:12px;justify-self:start}.photo-lightbox-controls .button:last-child{justify-self:end}.photo-lightbox-controls .button[hidden]{display:none}.photo-lightbox-controls>span{font-size:12px;grid-column:2;text-align:center;white-space:nowrap;color:var(--soft)}.photo-lightbox-help{font-size:12px;color:var(--soft);text-align:center;margin:0;padding:0 24px 14px;flex-shrink:0}
@media(max-width:1100px){.port-gallery-options{grid-template-columns:repeat(2,minmax(0,1fr))}.gallery-photo figcaption{padding:10px 13px}.shore-option-copy{padding:20px}.photo-lightbox-header h2{font-size:22px}}
@media(max-width:760px){.port-gallery-options{grid-template-columns:1fr;padding:21px;gap:21px}.gallery-photo figcaption{align-items:center;font-size:12px;padding:8px 15px;gap:12px}.gallery-photo figcaption>a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:72px;font-size:12px;white-space:normal}.port-gallery-options .gallery-photo figcaption{font-size:11px}.gallery-photo-action{font-size:13px;min-height:44px}.shore-option-copy{padding:21px}.shore-option-copy .text-link{display:inline-flex;align-items:center;gap:8px;min-height:44px;font-size:12px}.photo-lightbox{inset:max(8px,env(safe-area-inset-top)) max(8px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left));width:auto;height:auto;max-width:none;max-height:none;margin:0;border-radius:15px}.photo-lightbox-header{padding:16px;gap:12px}.photo-lightbox-header h2{font-size:20px}.photo-lightbox-close{min-width:44px;min-height:44px;font-size:29px}.photo-lightbox-caption{padding:14px 16px;max-height:29dvh}.photo-lightbox-caption>p{font-size:15px;line-height:1.5;margin-bottom:10px}.photo-lightbox-attribution{font-size:12px;gap:0 15px}.photo-lightbox-attribution>span{flex-basis:100%;margin-bottom:5px}.photo-lightbox-attribution>a{display:inline-flex;align-items:center;min-height:44px;font-size:12px}.photo-lightbox-controls{padding:12px 16px 8px;gap:12px}.photo-lightbox-controls .button{font-size:13px;min-width:95px;padding:10px 12px;gap:8px}.photo-lightbox-controls>span{font-size:12px}.photo-lightbox-help{padding:0 16px 12px;font-size:12px}.photo-lightbox-stage{min-height:90px}}
@media(max-width:410px){.port-gallery-options{padding:16px}.shore-option-copy{padding:19px}.gallery-photo figcaption>span{font-size:11px}.photo-lightbox-header h2{font-size:19px}.photo-lightbox-controls .button{min-width:88px;padding:10px;font-size:12px}.photo-lightbox-controls{gap:8px}.photo-lightbox-caption{max-height:30dvh}}
@media(prefers-reduced-motion:reduce){.gallery-photo-link>img{transition:none}}
@media print{.photo-lightbox,.gallery-photo-action{display:none!important}}
.photo-lightbox [hidden]{display:none!important}.photo-lightbox-caption>.photo-rights-note{font-size:12px;line-height:1.5;color:var(--soft);margin:10px 0 0}.photo-lightbox .photo-lightbox-attribution:empty{display:none}
@media(max-width:760px){.photo-lightbox-caption>.photo-rights-note{font-size:12px}}
.lounge-directory-source{margin-top:16px}
@media(max-height:500px){.photo-lightbox-header{padding:10px 16px}.photo-lightbox-header .eyebrow{display:none}.photo-lightbox-header h2{font-size:18px}.photo-lightbox-caption{max-height:24dvh;padding:10px 16px}.photo-lightbox-stage{min-height:60px}.photo-lightbox-controls{padding:8px 16px}.photo-lightbox-help{display:none}}
.gallery-credit-list{grid-template-columns:repeat(2,minmax(0,1fr))}.gallery-credit{scroll-margin-top:100px}.gallery-credit h3{font-size:18px}.gallery-credit p{overflow-wrap:anywhere}.gallery-credit-links{display:flex;flex-wrap:wrap;gap:8px 22px;font-size:12px}.gallery-credit-links a{display:inline-flex;align-items:center;min-height:44px}@media(max-width:760px){.gallery-credit-list{grid-template-columns:minmax(0,1fr)}.gallery-credit-links{font-size:13px}}

/* ===== Desktop shell (>=761px): an ocean-blue rail on the left and the working page as a rounded window.
   Every rail rule lives in this block; the phone More sheet (<=760px) keeps its own light styling above. ===== */
@media(min-width:761px){
  body:has(.app-shell){
  background:linear-gradient(180deg,var(--rail-top),var(--rail-bottom))
}
.sidebar{
  --focus:var(--sun);
  background:transparent;
  border-right:0;
  color:#daf3f6
}
.sidebar .brand{
  color:#ffffff
}
.sidebar .brand-icon{
  background:#074b68;
  color:var(--sun);
  box-shadow:0 0 0 1px #ffffff1f
}
.sidebar .brand-sub{
  color:#daf3f6
}
.sidebar .trip-label{
  margin:24px 12px 14px;
  color:#b8e1e9;
  letter-spacing:.1em
}
.sidebar .trip-label span{
  color:#b8e1e9
}
.sidebar nav{
  padding-bottom:24px;
  -webkit-mask-image:linear-gradient(#000 calc(100% - 28px),transparent);
  mask-image:linear-gradient(#000 calc(100% - 28px),transparent)
}
.sidebar nav.at-end{
  -webkit-mask-image:none;
  mask-image:none
}
.sidebar .nav-section{
  color:#aed7e1;
  font-size:11px;
  letter-spacing:.1em;
  padding:18px 12px 6px
}
.sidebar .nav-link{
  color:#daf3f6;
  font-size:14px;
  font-weight:500;
  padding:10px 12px;
  gap:12px;
  margin:1px 0;
  border-radius:10px
}
.sidebar .nav-link .icon{
  width:20px;
  height:20px;
  color:#b8e1e9
}
.sidebar .nav-link:active{
  background:#ffffff1a
}
.sidebar .nav-link.active{
  background:#ffffff1f;
  color:#fff;
  font-weight:600
}
.sidebar .nav-link.active .icon{
  color:var(--sun)
}
.sidebar .nav-link.active::before{
  left:-12px;
  width:3px;
  height:22px;
  background:var(--sun)
}
.sidebar .sidebar-bottom{
  padding-top:10px
}
.sidebar .sidebar-bottom>.fine{
  color:#aed7e1
}
.sidebar .profile{
  border-top:1px solid #ffffff1a;
  color:#fff;
  padding:14px 8px 0
}
.sidebar .profile strong{
  color:#fff
}
.sidebar .profile small{
  color:#b8e1e9
}
.sidebar .profile .avatar{
  background:var(--sun);
  color:#074b68
}
.app-shell{
  margin:10px 10px 10px 258px;
  min-height:calc(100dvh - 20px);
  background:var(--canvas);
  border-radius:18px;
  box-shadow:var(--shadow-lg),0 0 0 1px #ffffff12;
  overflow:clip
}
.topbar{
  border-radius:18px 18px 0 0
}
.table-wrap{
  overflow:clip
}
.table-wrap th{
  top:var(--topbar-h)
}
.auth-form form{
  padding:22px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:16px;
  box-shadow:var(--shadow-sm)
}
.auth-form form .button{
  margin-top:4px
}
}
@media(hover:hover) and (min-width:761px){
  .sidebar .nav-link:hover{
  background:#ffffff12;
  color:#fff
}
.sidebar .nav-link:hover .icon{
  color:var(--sun)
}
.sidebar .profile:hover{
  background:#ffffff12
}
}
@media(min-width:761px) and (max-width:1250px){
  .app-shell{
  margin-left:230px
}
}
/* Shorter laptop screens: the rail compacts so the whole nav stays reachable (it also scrolls, with a bottom fade). */
@media(min-width:761px) and (max-height:900px){
  .sidebar{
  padding-top:16px
}
.sidebar .trip-label{
  margin:16px 12px 10px
}
.sidebar .nav-link{
  padding:8px 12px;
  margin:0
}
.sidebar .nav-section{
  padding:14px 12px 4px
}
.sidebar .sidebar-bottom{
  padding-top:6px
}
.sidebar .sidebar-bottom>.fine{
  padding-bottom:8px
}
}
