:root {
  color-scheme: light;
  --ink: #112735;
  --ink-muted: #526874;
  --paper: #f8fbf9;
  --white: #ffffff;
  --glacier: #b7dfe7;
  --lagoon: #087e8b;
  --leaf: #1f6257;
  --sand: #edc87e;
  --line: rgba(17, 39, 53, 0.14);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --page-pad: clamp(20px, 6.4vw, 30px);
  font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  font-synthesis: none;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 58px; }
body {
  margin: 0;
  color: var(--ink);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
}
body.menu-open { overflow: hidden; }
button, a { -webkit-tap-highlight-color: transparent; }
a { color: inherit; }
button { font: inherit; }
svg { fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; }

.skip-link {
  position: fixed;
  z-index: 100;
  top: 8px;
  left: 8px;
  padding: 10px 14px;
  color: var(--white);
  background: var(--ink);
  border-radius: 8px;
  transform: translateY(-150%);
}
.skip-link:focus { transform: translateY(0); }
:focus-visible { outline: 3px solid var(--sand); outline-offset: 3px; }

.topbar {
  position: fixed;
  z-index: 20;
  inset: 0 0 auto;
  height: calc(58px + env(safe-area-inset-top, 0px));
  padding: env(safe-area-inset-top, 0px) var(--page-pad) 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: rgba(248, 251, 249, 0.9);
  border-bottom: 1px solid transparent;
  backdrop-filter: blur(16px);
  transition: border-color 180ms ease;
}
.topbar.scrolled { border-bottom-color: var(--line); }
.brand { display: inline-flex; align-items: center; gap: 9px; font-size: 14px; font-weight: 650; text-decoration: none; }
.brand-mark {
  display: grid;
  width: 28px;
  aspect-ratio: 1;
  place-items: center;
  color: var(--white);
  background: var(--ink);
  border-radius: 50% 50% 50% 16%;
  font-size: 13px;
}
.menu-button, .icon-button, .top-button, .section-button {
  border: 0;
  color: inherit;
  background: none;
  cursor: pointer;
}
.menu-button { display: flex; align-items: center; gap: 7px; min-height: 44px; padding: 0; font-size: 14px; font-weight: 650; }
.menu-button svg { width: 21px; }

.menu-backdrop { position: fixed; z-index: 29; inset: 0; background: rgba(10, 30, 38, 0.38); backdrop-filter: blur(2px); }
.section-menu {
  position: fixed;
  z-index: 30;
  inset: 0 0 0 auto;
  width: min(88vw, 380px);
  padding: calc(24px + env(safe-area-inset-top, 0px)) 26px calc(28px + var(--safe-bottom));
  overflow-y: auto;
  color: var(--white);
  background: var(--ink);
  transform: translateX(105%);
  visibility: hidden;
  transition: transform 260ms cubic-bezier(.2,.8,.2,1), visibility 260ms;
}
.section-menu.open { transform: translateX(0); visibility: visible; }
.menu-heading { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 28px; }
.menu-heading p { margin: 0 0 4px; color: var(--glacier); font-size: 12px; }
.menu-heading h2 { margin: 0; font-size: 26px; letter-spacing: -0.04em; }
.icon-button { display: grid; width: 44px; aspect-ratio: 1; place-items: center; }
.icon-button svg { width: 24px; }
.menu-list, .menu-list ol { margin: 0; padding: 0; list-style: none; }
.menu-list > li { border-top: 1px solid rgba(255,255,255,.14); }
.menu-list a { display: block; padding: 15px 2px; text-decoration: none; }
.menu-list > li > a { font-size: 18px; font-weight: 650; }
.menu-list ol { padding: 0 0 9px 18px; }
.menu-list ol a { padding: 7px 0; color: #bcd0d7; font-size: 14px; }
.menu-list a[aria-current="location"] { color: var(--sand); }

main { overflow: clip; }
.hero {
  min-height: 100svh;
  padding: calc(96px + env(safe-area-inset-top, 0px)) var(--page-pad) calc(110px + var(--safe-bottom));
  background: linear-gradient(154deg, #edf8fb 0 57%, #e0f1ec 57% 100%);
}
.date-line { margin: 0 0 20px; color: var(--leaf); font-size: 13px; font-weight: 650; letter-spacing: .04em; }
.hero h1 { margin: 0; max-width: 7ch; font-size: clamp(58px, 19vw, 82px); line-height: .98; letter-spacing: -.075em; }
.hero-intro { max-width: 29em; margin: 22px 0 0; color: var(--ink-muted); font-size: 16px; line-height: 1.75; }
.route-fork { position: relative; height: 200px; max-width: 430px; margin: 30px auto 6px; }
.origin-dot { position: absolute; top: 85px; left: 50%; width: 14px; height: 14px; border: 4px solid var(--white); background: var(--ink); border-radius: 50%; box-shadow: 0 0 0 1px rgba(17,39,53,.18); transform: translateX(-50%); }
.origin-label { position: absolute; top: 104px; left: 50%; font-size: 12px; font-weight: 650; transform: translateX(-50%); }
.route-line { position: absolute; top: 49px; left: 50%; width: 35%; height: 50px; border-top: 1.5px dashed rgba(17,39,53,.45); }
.route-line-west { border-left: 1.5px dashed rgba(17,39,53,.45); border-radius: 38px 0 0; transform: translateX(-100%) rotate(-8deg); transform-origin: right bottom; }
.route-line-south { border-right: 1.5px dashed rgba(17,39,53,.45); border-radius: 0 38px 0 0; transform: rotate(9deg); transform-origin: left bottom; }
.route-destination { position: absolute; display: flex; gap: 10px; min-width: 142px; padding: 12px; text-decoration: none; border-radius: 14px; box-shadow: 0 12px 30px rgba(17,39,53,.08); }
.route-destination strong, .route-destination small { display: block; }
.route-destination strong { font-size: 16px; }
.route-destination small { margin-top: 2px; color: rgba(17,39,53,.67); font-size: 11px; }
.route-weather { font-size: 26px; line-height: 1; }
.destination-west { top: 0; left: 0; background: #d7edf1; transform: rotate(-2deg); }
.destination-south { right: 0; bottom: 0; background: #c5e5d9; transform: rotate(2deg); }
.trip-facts { display: grid; grid-template-columns: 1fr 1fr 1.25fr; margin: 0; padding: 18px 0 0; border-top: 1px solid var(--line); }
.trip-facts div { min-width: 0; padding: 0 11px; border-left: 1px solid var(--line); }
.trip-facts div:first-child { padding-left: 0; border: 0; }
.trip-facts dt { color: var(--ink-muted); font-size: 11px; }
.trip-facts dd { margin: 5px 0 0; font-size: 13px; font-weight: 650; }

.reading-section { padding: 70px var(--page-pad) 90px; background: var(--white); }
.section-heading { display: flex; gap: 16px; align-items: center; margin-bottom: 50px; }
.section-symbol { display: grid; flex: 0 0 58px; aspect-ratio: 1; place-items: center; color: var(--white); background: var(--lagoon); border-radius: 50% 50% 18% 50%; font-size: 22px; font-weight: 700; }
.section-heading p, .section-heading h2 { margin: 0; }
.section-heading p { margin-bottom: 3px; color: var(--ink-muted); font-size: 12px; }
.section-heading h2 { font-size: 34px; letter-spacing: -.05em; }
.prose { margin-top: 46px; }
.prose h3, .route-body h3 { margin: 0 0 14px; font-size: 22px; letter-spacing: -.035em; }
.prose p { margin: 0; color: var(--ink-muted); font-size: 15px; line-height: 1.85; }
.prose a, .route-body a { color: var(--lagoon); text-decoration-thickness: 1px; text-underline-offset: 3px; }
.media-frame { margin: 28px 0; }
.media-frame img { display: block; width: 100%; height: auto; border-radius: 4px 22px 22px 22px; }
.media-frame figcaption { margin-top: 9px; color: var(--ink-muted); font-size: 11px; line-height: 1.55; }
.comparison-scroll { margin: 22px calc(var(--page-pad) * -1) 0; padding: 0 var(--page-pad); overflow-x: auto; }
table { width: 100%; min-width: 510px; border-collapse: collapse; font-size: 13px; line-height: 1.5; }
th, td { padding: 14px 12px; text-align: left; vertical-align: top; border-bottom: 1px solid var(--line); }
thead th { color: var(--ink-muted); font-size: 12px; font-weight: 500; }
tbody th { width: 70px; font-weight: 650; }
.check-list { margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--line); }
.check-list li { display: flex; justify-content: space-between; gap: 16px; padding: 15px 0; border-bottom: 1px solid var(--line); }
.check-list span { color: var(--ink-muted); font-size: 13px; }
.check-list strong { font-size: 13px; text-align: right; }

.route-section { padding-bottom: 86px; }
.route-header { position: relative; min-height: 300px; padding: 72px var(--page-pad) 30px; overflow: hidden; }
.xinjiang-section .route-header { color: #102e3e; background: linear-gradient(165deg, #acdbe5, #d8ebdb 66%, #edc87e); }
.bali-section .route-header { color: #0e3438; background: linear-gradient(165deg, #a7e1df, #62b9b2 64%, #edce8e); }
.route-header div { position: relative; z-index: 2; }
.route-header p { margin: 0 0 7px; font-size: 12px; font-weight: 650; }
.route-header h2 { margin: 0 0 8px; font-size: 46px; line-height: 1; letter-spacing: -.065em; }
.route-header span { font-size: 14px; }
.landmark { position: absolute; z-index: 1; right: -28px; bottom: -20px; display: block; opacity: .74; }
.mountain { width: 210px; height: 150px; background: #f5f6db; clip-path: polygon(4% 100%, 38% 35%, 52% 56%, 67% 20%, 100% 100%); }
.mountain::after { content: ""; position: absolute; inset: 28px 44px auto auto; width: 58px; height: 52px; background: white; clip-path: polygon(50% 0, 100% 100%, 61% 72%, 45% 88%, 26% 64%, 0 100%); }
.wave { right: 12px; bottom: -32px; color: rgba(255,255,255,.55); font-family: Georgia, serif; font-size: 210px !important; line-height: .7; transform: rotate(-7deg); }
.route-body { padding: 46px var(--page-pad) 0; }
.research-stamp, .snapshot-time { margin: 0 0 9px; color: var(--lagoon); font-size: 11px; font-weight: 650; }
.verdict-card { margin-top: 20px; padding: 22px 0; border-block: 3px solid var(--ink); }
.verdict-card .verdict-kicker { margin: 0 0 7px; color: var(--lagoon); font-size: 12px; font-weight: 700; }
.verdict-card h4 { margin: 0; font-size: 23px; line-height: 1.35; letter-spacing: -.04em; }
.verdict-card > p:not(.verdict-kicker) { margin: 14px 0 0; color: var(--ink-muted); font-size: 14px; line-height: 1.8; }
.verdict-card dl { display: grid; grid-template-columns: repeat(3, 1fr); margin: 20px 0 0; padding-top: 16px; border-top: 1px solid var(--line); }
.verdict-card dl div { min-width: 0; padding: 0 10px; border-left: 1px solid var(--line); }
.verdict-card dl div:first-child { padding-left: 0; border-left: 0; }
.verdict-card dt { color: var(--ink-muted); font-size: 10px; }
.verdict-card dd { margin: 5px 0 0; font-size: 12px; font-weight: 700; }
.bali-verdict .verdict-kicker { color: #147d79; }
.route-explainer { margin: 18px 0 0; color: var(--ink-muted); font-size: 13px; line-height: 1.75; }
.table-hint { margin: -6px 0 12px; color: var(--ink-muted); font-size: 11px; }
.route-comparison { margin-top: 0; }
.route-comparison table { min-width: 780px; }
.route-comparison th:first-child { width: 112px; }
.route-comparison td { width: 164px; }
.route-comparison .recommended-row { background: #eef8f5; }
.route-chip { display: block; width: max-content; margin-bottom: 6px; padding: 2px 7px; color: var(--white); background: var(--lagoon); border-radius: 999px; font-size: 9px; }
.budget-basis { margin: 14px 0 0; color: var(--ink-muted); font-size: 11px; line-height: 1.65; }
.budget-basis strong { color: var(--ink); }
.feature-list { margin: 0; padding: 0; list-style: none; }
.feature-list li { display: grid; grid-template-columns: 34px 1fr; gap: 12px; padding: 18px 0; border-top: 1px solid var(--line); }
.feature-list > li > span { color: var(--lagoon); font-size: 11px; font-weight: 700; }
.feature-list strong { display: block; margin: -4px 0 6px; font-size: 15px; }
.feature-list p { margin: 0; color: var(--ink-muted); font-size: 13px; line-height: 1.7; }
.option-strip { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(210px, 72vw); gap: 12px; margin: 0 calc(var(--page-pad) * -1); padding: 2px var(--page-pad) 16px; overflow-x: auto; scroll-snap-type: x mandatory; }
.option-strip article { padding: 20px; background: #e7f1f2; border-radius: 18px 18px 18px 4px; scroll-snap-align: start; }
.option-strip .recommended-option { color: var(--white); background: var(--ink); }
.option-strip .recommended-option span, .option-strip .recommended-option p { color: #bfd1d6; }
.option-strip strong, .option-strip span { display: block; }
.option-strip strong { font-size: 17px; }
.option-strip span { margin: 5px 0 18px; color: var(--lagoon); font-size: 12px; font-weight: 650; }
.option-strip p { margin: 0; color: var(--ink-muted); font-size: 13px; line-height: 1.6; }
.option-strip .route-path { min-height: 98px; margin-bottom: 14px; color: var(--ink); font-weight: 650; }
.itinerary-versions { margin-top: 26px; border-bottom: 1px solid var(--line); }
.itinerary-versions details { border-top: 1px solid var(--line); }
.itinerary-versions summary { display: grid; grid-template-columns: minmax(0, 1fr) auto 18px; gap: 10px; align-items: center; min-height: 64px; cursor: pointer; list-style: none; }
.itinerary-versions summary::-webkit-details-marker { display: none; }
.itinerary-versions summary::after { content: "+"; color: var(--lagoon); font-size: 22px; font-weight: 300; text-align: right; }
.itinerary-versions details[open] summary::after { content: "−"; }
.itinerary-versions summary span { font-size: 15px; font-weight: 700; }
.itinerary-versions summary small { color: var(--ink-muted); font-size: 10px; white-space: nowrap; }
.day-list { margin: 0; padding: 0 0 12px; list-style: none; }
.day-list li { display: grid; grid-template-columns: 50px 1fr; gap: 12px; padding: 14px 0; border-top: 1px dashed var(--line); }
.day-list time { color: var(--lagoon); font-size: 11px; font-weight: 750; }
.day-list strong { display: block; margin: -3px 0 4px; font-size: 13px; line-height: 1.45; }
.day-list p { margin: 0; color: var(--ink-muted); font-size: 12px; line-height: 1.65; }
.bali-itineraries { margin-top: 8px; }
.logistics-list { margin: 20px 0 0; padding: 0; list-style: none; border-bottom: 1px solid var(--line); }
.logistics-list li { padding: 16px 0; border-top: 1px solid var(--line); }
.logistics-list span, .logistics-list strong { display: block; }
.logistics-list span { margin-bottom: 5px; color: var(--lagoon); font-size: 10px; font-weight: 700; }
.logistics-list strong { font-size: 14px; }
.logistics-list p { margin: 5px 0 0; color: var(--ink-muted); font-size: 12px; line-height: 1.65; }
.rental-card { margin-top: 24px; padding: 22px; color: var(--white); background: var(--ink); border-radius: 20px 20px 20px 4px; }
.rental-card > p { margin: 0 0 5px; color: var(--glacier); font-size: 10px; font-weight: 700; }
.rental-card h4 { margin: 0; font-size: 18px; line-height: 1.4; }
.rental-card ul { margin: 17px 0 0; padding-left: 17px; color: #c4d4d9; font-size: 12px; line-height: 1.7; }
.rental-card li + li { margin-top: 8px; }
.budget-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; margin-top: 24px; overflow: hidden; background: var(--line); border: 1px solid var(--line); border-radius: 4px 18px 18px 18px; }
.budget-grid div { min-width: 0; padding: 14px; background: var(--paper); }
.budget-grid span, .budget-grid strong { display: block; }
.budget-grid span { color: var(--ink-muted); font-size: 10px; }
.budget-grid strong { margin-top: 5px; font-size: 12px; line-height: 1.4; }
.budget-grid .budget-total { grid-column: 1 / -1; color: var(--white); background: var(--leaf); }
.budget-grid .budget-total span { color: var(--glacier); }
.budget-grid .budget-total strong { font-size: 16px; }
.snapshot-time { color: var(--ink-muted); font-weight: 400; }
.snapshot-list { margin: 20px 0 0; padding: 0; list-style: none; border-top: 1px solid var(--line); }
.snapshot-list li { display: grid; grid-template-columns: 74px 1fr; gap: 12px; padding: 18px 0; border-bottom: 1px solid var(--line); }
.snapshot-list > li > span { color: var(--lagoon); font-size: 11px; font-weight: 700; }
.snapshot-list strong { display: block; margin: -4px 0 6px; font-size: 14px; line-height: 1.5; }
.snapshot-list p { margin: 0 0 7px; color: var(--ink-muted); font-size: 12px; line-height: 1.65; }
.snapshot-list a { font-size: 12px; font-weight: 650; }
.hotel-sample { margin-bottom: 12px; }
.hotel-sample img { aspect-ratio: 8 / 5; object-fit: cover; background: #e7f1f2; }
.booking-link { display: inline-flex; min-height: 44px; align-items: center; font-size: 13px; font-weight: 700; }
.platform-hint { margin: 12px 0 0; color: var(--ink-muted); font-size: 10px; line-height: 1.6; }
.hotel-grid { display: grid; gap: 14px; margin-top: 20px; }
.hotel-card { overflow: hidden; background: #e7f1f2; border-radius: 4px 20px 20px 20px; }
.hotel-card-copy { padding: 20px; }
.hotel-card-copy span { color: var(--lagoon); font-size: 10px; font-weight: 700; }
.hotel-card-copy h4 { margin: 5px 0 8px; font-size: 17px; line-height: 1.45; }
.hotel-card-copy p { margin: 0; color: var(--ink-muted); font-size: 12px; line-height: 1.7; }
.hotel-card img { display: block; width: 100%; height: auto; background: #dce9e9; }
.hotel-card-links { display: grid; gap: 1px; background: rgba(11, 65, 72, .12); }
.hotel-card-links a { display: flex; min-height: 46px; align-items: center; padding: 0 20px; background: #e7f1f2; font-size: 12px; font-weight: 700; }
.bali-transport { margin-top: 24px; }
.flight-day { margin-top: 20px; border: 1px solid var(--line); border-radius: 4px 20px 20px 20px; overflow: hidden; }
.flight-day > header { display: flex; flex-direction: column; gap: 5px; padding: 17px 18px; color: var(--white); background: var(--ink); }
.flight-day > header span { color: var(--glacier); font-size: 10px; font-weight: 700; }
.flight-day > header strong { font-size: 15px; }
.return-flight > header { background: var(--leaf); }
.flight-timeline { margin: 0; padding: 7px 18px; list-style: none; }
.flight-timeline li { position: relative; display: grid; grid-template-columns: 52px 1fr; gap: 12px; padding: 16px 0; border-top: 1px solid var(--line); }
.flight-timeline li:first-child { border-top: 0; }
.flight-timeline li::before { content: ""; position: absolute; top: 26px; left: 50px; width: 5px; height: 5px; background: var(--lagoon); border-radius: 50%; transform: translateX(-50%); }
.flight-timeline time { color: var(--lagoon); font-size: 12px; font-weight: 750; }
.flight-timeline strong { font-size: 14px; }
.flight-timeline p { margin: 4px 0 6px; color: var(--ink-muted); font-size: 12px; line-height: 1.55; }
.flight-timeline a { font-size: 11px; font-weight: 650; }
.flight-timeline .layover { background: linear-gradient(90deg, transparent 52px, #f3f7f6 52px); }
.flight-timeline .layover::before { background: var(--sand); }
.flight-timeline .layover time { color: #9a6200; }
.source-block { margin-top: 30px; padding-top: 22px; border-top: 3px solid var(--ink); }
.source-block h4 { margin: 0 0 12px; font-size: 16px; }
.source-block ul { margin: 0; padding: 0; list-style: none; }
.source-block li { padding: 9px 0; border-top: 1px solid var(--line); font-size: 12px; line-height: 1.55; }
.source-block > p { margin: 12px 0 0; color: var(--ink-muted); font-size: 10px; line-height: 1.6; }
.place-ribbon { display: flex; align-items: center; gap: 8px; padding: 20px 0; overflow-x: auto; white-space: nowrap; }
.place-ribbon span { padding: 10px 13px; color: var(--white); background: var(--leaf); border-radius: 999px; font-size: 13px; }
.place-ribbon i { display: block; flex: 0 0 24px; border-top: 1px dashed var(--leaf); }
.note { display: flex; gap: 12px; margin-top: 20px; padding: 16px; background: #e9f5f1; border-radius: 4px 16px 16px 16px; }
.note svg { flex: 0 0 20px; width: 20px; color: var(--leaf); }
.note p { margin: 0; color: var(--ink-muted); font-size: 13px; line-height: 1.65; }
.note strong { color: var(--ink); }
.note.warning-note { background: #fff4dc; }
.note.warning-note svg { color: #a66400; }

.next-section { padding: 78px var(--page-pad) calc(130px + var(--safe-bottom)); color: var(--white); background: var(--ink); }
.next-section > p { margin: 0 0 12px; color: var(--glacier); font-size: 13px; }
.next-section h2 { margin: 0 0 38px; font-size: clamp(31px, 9vw, 44px); line-height: 1.25; letter-spacing: -.05em; }
.next-section ol { margin: 0; padding: 0; list-style: none; counter-reset: next; }
.next-section li { display: grid; grid-template-columns: 28px 1fr; gap: 10px; padding: 16px 0; border-top: 1px solid rgba(255,255,255,.16); font-size: 14px; counter-increment: next; }
.next-section li::before { content: counter(next, decimal-leading-zero); color: var(--sand); font-size: 11px; }

.section-controls {
  position: fixed;
  z-index: 18;
  right: 10px;
  bottom: calc(10px + var(--safe-bottom));
  left: 10px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 46px minmax(0, 1fr);
  gap: 6px;
  padding: 6px;
  color: var(--white);
  background: rgba(17,39,53,.94);
  border: 1px solid rgba(255,255,255,.1);
  border-radius: 18px;
  box-shadow: 0 12px 34px rgba(17,39,53,.25);
  backdrop-filter: blur(16px);
}
.section-button { display: flex; min-width: 0; height: 46px; align-items: center; gap: 7px; padding: 0 8px; text-align: left; }
.section-button-next { justify-content: flex-end; text-align: right; }
.section-button svg { flex: 0 0 19px; width: 19px; }
.section-button span { min-width: 0; }
.section-button small, .section-button strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.section-button small { margin-bottom: 1px; color: #9eb2ba; font-size: 9px; }
.section-button strong { font-size: 11px; }
.section-button:disabled { opacity: .34; cursor: default; }
.top-button { display: grid; width: 46px; height: 46px; place-items: center; border-radius: 13px; background: var(--sand); color: var(--ink); }
.top-button svg { width: 19px; }

@media (min-width: 600px) {
  :root { --page-pad: 34px; }
  body { max-width: 520px; margin: 0 auto; box-shadow: 0 0 60px rgba(17,39,53,.12); }
  .topbar, .section-controls { width: min(520px, 100%); right: 50%; left: auto; transform: translateX(50%); }
  .section-controls { bottom: calc(10px + var(--safe-bottom)); }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; }
}
