/* ============================================================
   Compass Factory — 브랜드 컬러 시스템 (MZ 감성 리디자인)
   비비드 바이올렛(브랜드) + 코럴레드 + 골든옐로우 + 민트 조합의
   생동감 있는 팔레트. Pretendard 폰트로 타이포 전면 교체.
   ============================================================ */
:root {
  /* 커스텀 브랜드 토큰 */
  --brand: #6C5CE7;
  --brand-dark: #4A3FCF;
  --brand-darker: #362E9E;
  --brand-light: #F1EEFF;
  --brand-rgb: 108, 92, 231;

  --accent: #FF5A7A;      /* 코럴 핑크 (찜/하트/포인트) */
  --accent-dark: #E23F62;
  --accent-rgb: 255, 90, 122;

  --sunny: #FFC845;       /* 골든 옐로우 (카페/하이라이트) */
  --sunny-dark: #E6AE28;

  --mint: #22D3B4;        /* 민트 (액티비티/정보) */
  --mint-dark: #17B39A;

  --ink: #17162A;         /* 본문 텍스트 (완전 블랙 대신 톤다운) */
  --bg: #FAF9FF;          /* 은은한 라벤더 톤 배경 */

  /* Bootstrap 시맨틱 토큰 재정의 → 사이트 전역(버튼/배지/알림/폼 등)에 자동 반영 */
  --bs-body-font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, 'Malgun Gothic', sans-serif;
  --bs-body-color: var(--ink);
  --bs-body-bg: var(--bg);
  --bs-link-color: var(--brand);
  --bs-link-hover-color: var(--brand-dark);

  --bs-primary: var(--brand);
  --bs-primary-rgb: var(--brand-rgb);
  --bs-primary-text-emphasis: var(--brand-darker);
  --bs-primary-bg-subtle: var(--brand-light);
  --bs-primary-border-subtle: #C9BFFF;

  --bs-success: #34C77B;
  --bs-success-rgb: 52, 199, 123;
  --bs-success-text-emphasis: #0F7A46;
  --bs-success-bg-subtle: #E3FBEF;
  --bs-success-border-subtle: #A9EFC8;

  --bs-danger: #FF5A5F;
  --bs-danger-rgb: 255, 90, 95;
  --bs-danger-text-emphasis: #B22A2E;
  --bs-danger-bg-subtle: #FFE7E8;
  --bs-danger-border-subtle: #FFC0C2;

  --bs-warning: var(--sunny);
  --bs-warning-rgb: 255, 200, 69;
  --bs-warning-text-emphasis: #7A5A00;
  --bs-warning-bg-subtle: #FFF6DE;
  --bs-warning-border-subtle: #FFE49B;

  --bs-info: var(--mint);
  --bs-info-rgb: 34, 211, 180;
  --bs-info-text-emphasis: #0B6E5D;
  --bs-info-bg-subtle: #DEFBF5;
  --bs-info-border-subtle: #9FEEE0;
}

* { font-family: var(--bs-body-font-family); }

body { background: var(--bg); color: var(--ink); }
.bg-brand { background-color: var(--brand) !important; }
.bg-pink { background-color: var(--accent) !important; color: #fff !important; }
.bg-teal { background-color: #0EA5A5 !important; color: #fff !important; }
a { text-decoration: none; }
h1, h2, h3, h4, h5, h6, .fw-bold, .fw-semibold { letter-spacing: -.01em; }

/* ---------- Bootstrap 버튼/폼/탭 컴포넌트 재도색 ---------- */
.btn { border-radius: 999px; font-weight: 700; }
.btn-sm { border-radius: 999px; }

.btn-primary { --bs-btn-bg: var(--brand); --bs-btn-border-color: var(--brand); --bs-btn-hover-bg: var(--brand-dark); --bs-btn-hover-border-color: var(--brand-dark); --bs-btn-active-bg: var(--brand-darker); --bs-btn-active-border-color: var(--brand-darker); --bs-btn-disabled-bg: var(--brand); --bs-btn-disabled-border-color: var(--brand); }
.btn-outline-primary { --bs-btn-color: var(--brand); --bs-btn-border-color: var(--brand); --bs-btn-hover-bg: var(--brand); --bs-btn-hover-border-color: var(--brand); --bs-btn-active-bg: var(--brand); --bs-btn-active-border-color: var(--brand); --bs-btn-disabled-color: var(--brand); --bs-btn-disabled-border-color: var(--brand); }

.btn-success { --bs-btn-bg: var(--bs-success); --bs-btn-border-color: var(--bs-success); --bs-btn-hover-bg: #29A868; --bs-btn-hover-border-color: #29A868; --bs-btn-active-bg: #1F8A54; --bs-btn-active-border-color: #1F8A54; --bs-btn-disabled-bg: var(--bs-success); --bs-btn-disabled-border-color: var(--bs-success); }
.btn-outline-success { --bs-btn-color: var(--bs-success); --bs-btn-border-color: var(--bs-success); --bs-btn-hover-bg: var(--bs-success); --bs-btn-hover-border-color: var(--bs-success); --bs-btn-active-bg: var(--bs-success); --bs-btn-active-border-color: var(--bs-success); --bs-btn-disabled-color: var(--bs-success); --bs-btn-disabled-border-color: var(--bs-success); }

.btn-danger { --bs-btn-bg: var(--bs-danger); --bs-btn-border-color: var(--bs-danger); --bs-btn-hover-bg: var(--accent-dark); --bs-btn-hover-border-color: var(--accent-dark); --bs-btn-active-bg: #C4353A; --bs-btn-active-border-color: #C4353A; --bs-btn-disabled-bg: var(--bs-danger); --bs-btn-disabled-border-color: var(--bs-danger); }
.btn-outline-danger { --bs-btn-color: var(--bs-danger); --bs-btn-border-color: var(--bs-danger); --bs-btn-hover-bg: var(--bs-danger); --bs-btn-hover-border-color: var(--bs-danger); --bs-btn-active-bg: var(--bs-danger); --bs-btn-active-border-color: var(--bs-danger); --bs-btn-disabled-color: var(--bs-danger); --bs-btn-disabled-border-color: var(--bs-danger); }

.btn-warning { --bs-btn-color: #3A2C00; --bs-btn-bg: var(--sunny); --bs-btn-border-color: var(--sunny); --bs-btn-hover-color: #3A2C00; --bs-btn-hover-bg: var(--sunny-dark); --bs-btn-hover-border-color: var(--sunny-dark); --bs-btn-active-color: #3A2C00; --bs-btn-active-bg: #D99E1E; --bs-btn-active-border-color: #D99E1E; --bs-btn-disabled-bg: var(--sunny); --bs-btn-disabled-border-color: var(--sunny); }
.btn-outline-warning { --bs-btn-color: #A97E00; --bs-btn-border-color: var(--sunny); --bs-btn-hover-color: #3A2C00; --bs-btn-hover-bg: var(--sunny); --bs-btn-hover-border-color: var(--sunny); --bs-btn-active-color: #3A2C00; --bs-btn-active-bg: var(--sunny); --bs-btn-active-border-color: var(--sunny); --bs-btn-disabled-color: #A97E00; --bs-btn-disabled-border-color: var(--sunny); }

.btn-info { --bs-btn-color: #063E34; --bs-btn-bg: var(--mint); --bs-btn-border-color: var(--mint); --bs-btn-hover-color: #063E34; --bs-btn-hover-bg: var(--mint-dark); --bs-btn-hover-border-color: var(--mint-dark); --bs-btn-active-color: #063E34; --bs-btn-active-bg: #149781; --bs-btn-active-border-color: #149781; --bs-btn-disabled-bg: var(--mint); --bs-btn-disabled-border-color: var(--mint); }
.btn-outline-info { --bs-btn-color: #0B8672; --bs-btn-border-color: var(--mint); --bs-btn-hover-color: #063E34; --bs-btn-hover-bg: var(--mint); --bs-btn-hover-border-color: var(--mint); --bs-btn-active-color: #063E34; --bs-btn-active-bg: var(--mint); --bs-btn-active-border-color: var(--mint); --bs-btn-disabled-color: #0B8672; --bs-btn-disabled-border-color: var(--mint); }

.form-check-input:checked { background-color: var(--brand); border-color: var(--brand); }
.form-check-input:focus { border-color: var(--brand); box-shadow: 0 0 0 .25rem rgba(var(--brand-rgb), .25); }
.form-control:focus, .form-select:focus { border-color: var(--brand); box-shadow: 0 0 0 .25rem rgba(var(--brand-rgb), .15); }

.nav-pills { --bs-nav-pills-link-active-bg: var(--brand); }
.nav-link { color: var(--brand); }

.pagination { --bs-pagination-active-bg: var(--brand); --bs-pagination-active-border-color: var(--brand); --bs-pagination-color: var(--brand); --bs-pagination-hover-color: var(--brand-dark); --bs-pagination-focus-color: var(--brand-dark); }

/* 배지/유틸리티 색상: Bootstrap 유틸(.bg-*/.text-*)이 런타임 CSS 변수를 안 쓰는 경우까지
   대비한 안전장치 override (카테고리 배지 등 badge bg-success 패턴에서 사용) */
.badge.bg-success, .bg-success.badge-cat { background-color: var(--bs-success) !important; }
.badge.bg-danger, .bg-danger.badge-cat { background-color: var(--bs-danger) !important; }
.badge.bg-warning, .bg-warning.badge-cat { background-color: var(--bs-warning) !important; color: #3A2C00 !important; }
.badge.bg-primary, .bg-primary.badge-cat { background-color: var(--bs-primary) !important; }
.badge.bg-info, .bg-info.badge-cat { background-color: var(--bs-info) !important; color: #063E34 !important; }
.badge.bg-secondary { background-color: #8B90A6 !important; }
.badge.bg-success-subtle { background-color: var(--bs-success-bg-subtle) !important; }
.text-success-emphasis { color: var(--bs-success-text-emphasis) !important; }
.text-success { color: var(--bs-success) !important; }
.text-danger { color: var(--bs-danger) !important; }
.text-warning { color: var(--bs-warning) !important; }
.text-primary { color: var(--bs-primary) !important; }
.text-info { color: var(--bs-info) !important; }
.alert-success { background-color: var(--bs-success-bg-subtle) !important; border-color: var(--bs-success-border-subtle) !important; color: var(--bs-success-text-emphasis) !important; }
.alert-danger { background-color: var(--bs-danger-bg-subtle) !important; border-color: var(--bs-danger-border-subtle) !important; color: var(--bs-danger-text-emphasis) !important; }
.alert-warning { background-color: var(--bs-warning-bg-subtle) !important; border-color: var(--bs-warning-border-subtle) !important; color: var(--bs-warning-text-emphasis) !important; }
.alert-info { background-color: var(--bs-info-bg-subtle) !important; border-color: var(--bs-info-border-subtle) !important; color: var(--bs-info-text-emphasis) !important; }

/* ---------- 네비게이션 바 (글래스+그라디언트, 여행 설렘 리뉴얼) ---------- */
.navbar-glass {
  background: linear-gradient(120deg, rgba(74,63,207,.94) 0%, rgba(108,92,231,.94) 55%, rgba(142,124,255,.94) 100%) !important;
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  border-bottom: 1px solid rgba(255,255,255,.14);
  box-shadow: 0 4px 24px rgba(74,63,207,.18);
}
.navbar-brand { font-weight: 800; font-size: 1.3rem; letter-spacing: -.02em; }
.navbar-brand .brand-mark { display: inline-block; animation: brandFloat 3.2s ease-in-out infinite; }
.navbar-brand .brand-word em { font-style: normal; color: var(--sunny); }
@keyframes brandFloat { 0%,100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-3px) rotate(-6deg); } }
.navbar-brand, .nav-link { color: #fff !important; }
.nav-link { font-weight: 600; opacity: .92; }
.nav-link:hover { color: #fff !important; opacity: 1; }
.navbar .nav-link.nav-cta {
  background: linear-gradient(120deg, var(--sunny), #FFB020);
  color: var(--brand-darker) !important;
  border-radius: 999px;
  padding: .4rem 1rem !important;
  font-weight: 800;
  opacity: 1;
  box-shadow: 0 4px 14px rgba(255,200,69,.4);
  transition: transform .15s ease, box-shadow .15s ease;
}
.navbar .nav-link.nav-cta:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(255,200,69,.5); }
.navbar-nav .dropdown-menu-travel {
  border: none; border-radius: 16px; padding: 8px;
  box-shadow: 0 16px 40px rgba(74,63,207,.22);
  margin-top: 10px;
}
.dropdown-menu-travel .dropdown-item { border-radius: 10px; padding: .55rem .9rem; font-weight: 600; color: var(--ink); }
.dropdown-menu-travel .dropdown-item i { color: var(--brand); margin-right: 4px; width: 1.1em; display: inline-block; }
.dropdown-menu-travel .dropdown-item:hover, .dropdown-menu-travel .dropdown-item:focus { background: var(--brand-light); color: var(--brand-darker); }
.navbar .dropdown-toggle::after { opacity: .7; }

/* ---------- 히어로 (설렘 가득한 여행 무드) ---------- */
:root {
  --font-display: 'Black Han Sans', 'Pretendard', sans-serif;
  --font-hand: 'Gaegu', 'Pretendard', cursive;
}
.hero {
  position: relative;
  overflow: hidden;
  background: linear-gradient(135deg, var(--brand-darker) 0%, var(--brand) 45%, #9B7BFF 75%, #FF8FAE 130%);
  color: #fff;
  padding: 108px 0 132px;
  isolation: isolate;
}
.hero::before, .hero::after {
  content: "";
  position: absolute;
  border-radius: 50%;
  filter: blur(2px);
  opacity: .35;
  z-index: -1;
}
.hero::before { width: 340px; height: 340px; background: var(--sunny); top: -140px; right: 8%; animation: driftSlow 9s ease-in-out infinite; }
.hero::after { width: 260px; height: 260px; background: var(--mint); bottom: -120px; left: 6%; animation: driftSlow 11s ease-in-out infinite reverse; }
@keyframes driftSlow { 0%,100% { transform: translate(0,0); } 50% { transform: translate(14px,-14px); } }

.hero .eyebrow {
  display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.3);
  border-radius: 999px; padding: .4rem 1.1rem; font-weight: 700; font-size: .85rem; margin-bottom: 22px;
  letter-spacing: .02em;
}
.hero h1 {
  font-family: var(--font-display);
  font-weight: 400; font-size: clamp(2rem, 4.2vw, 3.2rem); line-height: 1.3;
  letter-spacing: -.01em;
  text-shadow: 0 2px 24px rgba(0,0,0,.15);
}
.hero p.fs-5 { opacity: .94; }
.hero .btn-cta {
  background: #fff; color: var(--brand-darker); font-weight: 800; border: none;
  box-shadow: 0 10px 30px rgba(0,0,0,.18);
  transition: transform .15s ease, box-shadow .15s ease;
  position: relative;
}
.hero .btn-cta:hover { background: #fff; transform: translateY(-3px) scale(1.02); box-shadow: 0 16px 38px rgba(0,0,0,.26); }

/* 점선 항로 + 비행기 장식: 히어로 상단을 가로지르는 여행 경로 모티프 */
.hero-flightpath { position: absolute; top: 18%; left: 0; width: 100%; height: 140px; z-index: -1; opacity: .55; pointer-events: none; }
.hero-flightpath path { stroke-dasharray: 8 10; }
.hero-plane { transform-origin: center; animation: planeFly 7s linear infinite; }
@keyframes planeFly {
  0%   { offset-distance: 0%; }
  100% { offset-distance: 100%; }
}
@supports (offset-path: path("M0,0")) {
  .hero-plane { offset-path: path("M -20,90 C 200,10 500,170 820,40"); animation: planeFlyOffset 9s linear infinite; }
  @keyframes planeFlyOffset { 0% { offset-distance: 0%; opacity: 0; } 5% { opacity: 1; } 95% { opacity: 1; } 100% { offset-distance: 100%; opacity: 0; } }
}

/* 엽서(포스트카드) 플로팅 카드: 여행 사진을 손글씨 스탬프처럼 흩뿌려 놓은 느낌 */
.hero-postcards { display: none; }
@media (min-width: 992px) {
  .hero-postcards { display: block; position: absolute; inset: 0; z-index: 0; pointer-events: none; }
  .postcard {
    position: absolute; width: 132px; height: 96px; border-radius: 12px; padding: 6px;
    background: #fff; box-shadow: 0 18px 34px rgba(0,0,0,.28);
    animation: postcardBob 5s ease-in-out infinite;
  }
  .postcard img { width: 100%; height: 100%; object-fit: cover; border-radius: 7px; }
  .postcard.pc-1 { top: 6%; left: 4%; transform: rotate(-9deg); animation-delay: .2s; }
  .postcard.pc-2 { top: 62%; left: 2%; transform: rotate(6deg); animation-delay: 1.4s; }
  .postcard.pc-3 { top: 10%; right: 4%; transform: rotate(8deg); animation-delay: .8s; }
  .postcard.pc-4 { top: 60%; right: 3%; transform: rotate(-7deg); animation-delay: 2s; }
  @keyframes postcardBob { 0%,100% { transform: translateY(0) rotate(var(--rot, 0deg)); } 50% { transform: translateY(-10px) rotate(var(--rot, 0deg)); } }
  .postcard.pc-1 { --rot: -9deg; } .postcard.pc-2 { --rot: 6deg; } .postcard.pc-3 { --rot: 8deg; } .postcard.pc-4 { --rot: -7deg; }
}

/* 히어로 하단 물결 디바이더: 다음 섹션과 부드럽게 이어지도록 */
.hero-wave { display: block; width: 100%; height: 48px; margin-top: -6px; }
.hero-wave path { fill: var(--bg); }

/* 손글씨 폰트 포인트(엽서 캡션/섹션 서브타이틀에 사용) */
.hand-note { font-family: var(--font-hand); font-weight: 700; font-size: 1.4rem; color: var(--accent); }

/* ---------- 목적지 카드 ---------- */
.card-dest { border: none; border-radius: 20px; overflow: hidden; box-shadow: 0 4px 16px rgba(108,92,231,.10); transition: transform .18s ease, box-shadow .18s ease; height: 100%; }
.card-dest:hover { transform: translateY(-6px); box-shadow: 0 14px 30px rgba(108,92,231,.20); }
.card-dest .thumb { height: 160px; background-size: cover; background-position: center; background-repeat: no-repeat; background-color: var(--brand-light); }
.card-dest .card-body { padding: 16px; }

.wish-btn { border: none; background: none; font-size: 1.3rem; color: #d8d3ee; cursor: pointer; transition: transform .15s ease; }
.wish-btn:hover { transform: scale(1.15); }
.wish-btn.active { color: var(--accent); }

.badge-cat { font-weight: 700; border-radius: 999px; }

.rounded-4 { border-radius: 18px !important; }
.card.border-0.shadow-sm { box-shadow: 0 3px 14px rgba(108,92,231,.08) !important; transition: transform .15s ease, box-shadow .15s ease; }
.card.border-0.shadow-sm:hover { transform: translateY(-3px); box-shadow: 0 10px 24px rgba(108,92,231,.14) !important; }

/* ---------- 일차 탭 ---------- */
.day-tab { flex-wrap: wrap; gap: 8px; }
.day-tab .nav-link {
  font-weight: 700;
  color: var(--brand-dark) !important;
  background: #fff;
  border: 2px solid var(--brand);
  border-radius: 999px;
  padding: 8px 18px;
  transition: background .15s, color .15s, box-shadow .15s;
}
.day-tab .nav-link span { color: var(--brand) !important; font-weight: 600; }
.day-tab .nav-link:hover { background: var(--brand-light); }
.day-tab .nav-link.active {
  background: linear-gradient(120deg, var(--brand), #8E7CFF);
  color: #fff !important;
  border-color: var(--brand-dark);
  box-shadow: 0 4px 14px rgba(108,92,231,.4);
}
.day-tab .nav-link.active span { color: #fff !important; }

/* ---------- 일정 아이템 카드 ---------- */
.item-card { border: 1px solid #ECE9FA; border-radius: 16px; padding: 12px 14px; margin-bottom: 10px; background: #fff; cursor: grab; box-shadow: 0 2px 8px rgba(108,92,231,.05); }
.item-card:active { cursor: grabbing; }
.item-card .time-badge { font-weight: 800; color: var(--brand); min-width: 56px; display: inline-block; }
.item-thumb { width: 64px; height: 64px; object-fit: cover; border-radius: 12px; background: var(--brand-light); }

.leg-info-inline {
  font-size: .74rem; font-weight: 700; color: var(--brand-dark);
  margin-top: 6px; min-height: 1em;
}
.leg-info-mini { font-size: .72rem; font-weight: 700; color: var(--brand-dark); margin: 0 0 4px 26px; }

.place-title { cursor: pointer; }
.place-title:hover { color: var(--brand) !important; text-decoration: underline; }
.place-title .bi-info-circle { font-size: .8em; }

.budget-bar { height: 10px; border-radius: 6px; background: #ECE9FA; overflow: hidden; }
.budget-bar > div { height: 100%; background: linear-gradient(90deg, var(--brand), var(--mint)); }
.budget-bar.over > div { background: linear-gradient(90deg, var(--accent), var(--bs-danger)); }

.step-badge { width: 28px; height: 28px; border-radius: 50%; background: var(--brand); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; }

.rating-star { color: var(--sunny-dark); }

#map, .map-box { width: 100%; height: 520px; border-radius: 16px; z-index: 1; }
.map-sticky { position: sticky; top: 84px; }
.route-marker-inner {
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--brand); color: #fff; font-weight: 700; font-size: .8rem;
  display: flex; align-items: center; justify-content: center;
  border: 2px solid #fff; box-shadow: 0 1px 4px rgba(0,0,0,.35);
}
.route-legend { max-height: 160px; overflow-y: auto; }
.route-legend .route-num {
  width: 20px; height: 20px; border-radius: 50%; background: var(--brand); color: #fff;
  font-size: .72rem; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; flex: none;
}

/* ---------- 대안 추천 사이드바 ---------- */
.rec-sidebar { max-height: calc(100vh - 100px); overflow-y: auto; padding-right: 2px; }
.rec-chip {
  display: flex; align-items: center; gap: 6px;
  border: 1px solid #ECE9FA; border-radius: 14px; padding: 6px 8px;
  background: #fff; width: 100%; cursor: grab;
  transition: box-shadow .15s ease, border-color .15s ease;
}
.rec-chip:hover { border-color: var(--brand); box-shadow: 0 4px 14px rgba(108,92,231,.18); }
.rec-chip:active { cursor: grabbing; }
.rec-chip.sortable-ghost { opacity: .4; }
.rec-chip-drag { cursor: grab; }
.rec-chip-thumb { width: 40px; height: 40px; border-radius: 10px; object-fit: cover; flex: none; }
.rec-chip-body { flex: 1 1 auto; min-width: 0; }
.rec-chip-name { font-size: .85rem; font-weight: 700; }
.rec-chip-meta { font-size: .75rem; }
.rec-chip-add { flex: none; padding: 2px 8px; }

footer.bg-dark { background: var(--ink) !important; }

/* ---------- 목적지 카드 이미지 줌 (여행 설렘 폴리시) ---------- */
.card-dest .thumb { transition: transform .35s ease; }
.card-dest:hover .thumb { transform: scale(1.08); }
.card-dest { position: relative; }
.card-dest::after {
  content: "";
  position: absolute; inset: 0; border-radius: 20px; pointer-events: none;
  box-shadow: inset 0 0 0 1px rgba(108,92,231,.06);
}

/* ---------- 섹션 타이틀 아이콘 배지 ---------- */
.section-title { display: flex; align-items: center; gap: 10px; }
.section-title .icon-badge {
  width: 40px; height: 40px; border-radius: 12px; display: inline-flex; align-items: center; justify-content: center;
  font-size: 1.2rem; background: var(--brand-light); color: var(--brand); flex: none;
}
.section-title .icon-badge.badge-sunny { background: #FFF6DE; color: var(--sunny-dark); }
.section-title .icon-badge.badge-mint { background: #DEFBF5; color: var(--mint-dark); }
.section-title .icon-badge.badge-accent { background: #FFE7EC; color: var(--accent-dark); }

/* ---------- 스크롤 등장 애니메이션 (IntersectionObserver + .reveal) ---------- */
.reveal { opacity: 0; transform: translateY(22px); transition: opacity .6s ease, transform .6s ease; }
.reveal.is-visible { opacity: 1; transform: translateY(0); }
.reveal-stagger.is-visible > * { animation: revealStagger .6s ease both; }
.reveal-stagger.is-visible > *:nth-child(2) { animation-delay: .06s; }
.reveal-stagger.is-visible > *:nth-child(3) { animation-delay: .12s; }
.reveal-stagger.is-visible > *:nth-child(4) { animation-delay: .18s; }
.reveal-stagger.is-visible > *:nth-child(5) { animation-delay: .24s; }
.reveal-stagger.is-visible > *:nth-child(6) { animation-delay: .3s; }
.reveal-stagger.is-visible > *:nth-child(7) { animation-delay: .36s; }
.reveal-stagger.is-visible > *:nth-child(8) { animation-delay: .42s; }
@keyframes revealStagger { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal-stagger > * { opacity: 1 !important; transform: none !important; animation: none !important; transition: none !important; }
  .hero-plane, .hero::before, .hero::after, .postcard, .brand-mark { animation: none !important; }
}

@media print {
  nav, footer, .no-print { display: none !important; }
}
