/* 지도: 전국 지도(SVG)·도시 카드·지도 단추, 도시 확대 거리 지도(MapLibre)·좌우 이름표 */
.stage{display:grid;grid-template-columns:minmax(0,1fr) var(--panel-w);min-height:0}
.map{position:relative;overflow:hidden;background:var(--sea);touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab}
.map.dragging{cursor:grabbing}
.map-svg{position:absolute;inset:0;width:100%;height:100%;display:block}
.land{fill:var(--land);stroke:var(--coast);stroke-width:1.1;vector-effect:non-scaling-stroke;stroke-linejoin:round}
.inset-frame{fill:none;stroke:var(--coast);stroke-width:1;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;opacity:.7}
.river{fill:none;stroke:var(--river);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.sea-name{font-size:13px;fill:var(--faint);letter-spacing:.3em;font-weight:500}
.district{font-size:13px;font-weight:700;fill:var(--faint);letter-spacing:.04em;paint-order:stroke;stroke:var(--land);stroke-width:4px;stroke-linejoin:round;pointer-events:none}
.lead{stroke:var(--ink-2);stroke-width:1;fill:none}
.ring{fill:var(--ink-wash);stroke:var(--ink-2);stroke-width:1;stroke-dasharray:3 3}
.anchor{fill:var(--ink);stroke:var(--card);stroke-width:2}
.anchor.dim{fill:var(--faint)}
.hdot{stroke:var(--card);stroke-width:2;cursor:pointer}
.hdot.dim{opacity:.22}
.hdot.on{stroke:var(--ink);stroke-width:3}
.hlabel{font-size:13px;font-weight:700;fill:var(--ink);paint-order:stroke;stroke:var(--card);stroke-width:4px;stroke-linejoin:round;pointer-events:none}

/* 도시 카드: full(체인별 줄) · compact(아이콘+수) · mini(이름+합계) · group(가까운 도시 묶음) */
.cards{position:absolute;inset:0;pointer-events:none}
.card{position:absolute;left:0;top:0;pointer-events:auto;width:max-content;max-width:calc(100vw - 24px);border:1.5px solid var(--ink);border-radius:4px;background:var(--card);box-shadow:var(--shadow);padding:0;text-align:left;transition:transform .12s,box-shadow .12s}
.card:hover,.card.hot{z-index:3;box-shadow:0 0 0 3px var(--signal),var(--shadow)}
.card.on{background:var(--signal);z-index:4}
.card-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:6px 9px 5px}
.card-h b{font-weight:700;font-size:15px;letter-spacing:0;color:var(--ink);white-space:nowrap}
.card-h .num{font-weight:700;font-size:20px;line-height:1}
.card-h .num small{font-family:var(--ko);font-size:12px;font-weight:700;margin-left:1px}
.card--full{width:160px}
.card--full ul{list-style:none;margin:0;padding:3px 9px 7px;border-top:1px solid var(--rule)}
.card.on ul{border-top-color:var(--ink-line)}
.card--full li{display:grid;grid-template-columns:22px 1fr auto;align-items:center;gap:8px;height:28px}
.card--full li .bi{width:22px;height:22px}
.card--full li>img{height:13px;width:auto;max-width:68px;display:block}
.card--full li>img.logo-accor{height:18px}
.card--full li .num{font-weight:700;font-size:15px}
.card--compact{display:flex;align-items:center;gap:10px;padding:5px 10px;white-space:nowrap}
.card--compact .card-h{padding:0;gap:6px}
.card--compact .card-h .num{font-size:17px}
.pips{display:flex;align-items:center;gap:13px}
.pip{display:inline-flex;align-items:center;gap:4px;font-family:var(--num);font-weight:700;font-size:17px;line-height:1}
.card--mini{display:flex;align-items:center;gap:5px;padding:3px 7px;border-width:1px;white-space:nowrap}
.card--mini .card-h{padding:0;gap:5px}
.card--mini .card-h b{font-size:13px}
.card--mini .card-h .num{font-size:15px}
.card--group{display:grid;grid-template-columns:auto auto 1fr;padding:3px;min-width:0}
.card--group:hover,.card--group:has(.hot){box-shadow:var(--shadow)}
/* 줄마다 같은 칸(subgrid): 도시 이름 · 합계 · 체인별 수. 합계는 이름에 붙이고 세로 선으로 체인별 수와 나눈다 */
.grow{grid-column:1/-1;display:grid;grid-template-columns:subgrid;align-items:center;column-gap:7px;height:36px;padding:0 8px;border:0;border-radius:3px;background:none;text-align:left;white-space:nowrap}
.grow+.grow{box-shadow:0 -1px 0 var(--rule-2)}
.grow b{font-weight:700;font-size:15px;color:var(--ink)}
.grow>.num{font-weight:700;font-size:17px;text-align:left;padding-right:11px;box-shadow:inset -1px 0 var(--rule)}
.grow>.num small{font-family:var(--ko);font-size:12px;font-weight:700;margin-left:1px}
.grow .pips{padding-left:4px}
.grow:hover,.grow.hot{background:var(--signal-soft)}
.grow.on{background:var(--signal)}
.card--group.is-mini{grid-template-columns:auto auto}
.card--group.is-mini .grow{height:26px}
.card--group.is-mini .grow>.num{padding-right:0;box-shadow:none}
.card--group.is-stack{grid-template-columns:auto 1fr}
.card--group.is-stack .grow{height:auto;row-gap:3px;padding:6px 8px}
.card--group.is-stack .grow .pips{grid-column:1/-1;padding:0 0 2px}
.card--group.is-stack .grow>.num{padding-right:0;box-shadow:none}

/* 지도 단추 · 안내 */
.map-tools{position:absolute;right:16px;bottom:16px;z-index:5;display:grid;border:1.5px solid var(--ink);border-radius:4px;background:var(--card);box-shadow:var(--shadow);overflow:hidden}
.map-tools button{width:40px;height:40px;border:0;background:none;font-size:20px;font-weight:500;line-height:1}
.map-tools button[hidden]{display:none}
.map-tools button:not([hidden])~button{border-top:1px solid var(--rule)}
.map-tools:not(:has(button:not([hidden]))){display:none}
.map-tools button:hover{background:var(--paper-2)}
.map-tools button.map-export{display:grid;place-items:center}
.map-tools{transition:opacity .25s}
.map-tools.idle{opacity:0;pointer-events:none}
.map-export svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.map-export[aria-busy]{opacity:.5;cursor:progress}
.map-back{position:absolute;left:16px;top:16px;z-index:5;height:40px;padding:0 16px;border:1.5px solid var(--ink);border-radius:20px;background:var(--card);box-shadow:var(--shadow);font-weight:700;font-size:14px}
.map-back:hover{background:var(--signal)}
/* 오른쪽 목록 접기(넓은 화면만, app.js installPanelToggle) */
.panel-toggle{position:absolute;right:16px;top:16px;z-index:5;height:34px;padding:0 14px;border:1.5px solid var(--ink);border-radius:17px;background:var(--card);box-shadow:var(--shadow);font-weight:700;font-size:13px}
.panel-toggle:hover{background:var(--paper-2)}
.stage.panel-off{grid-template-columns:minmax(0,1fr) 0}
.stage.panel-off .panel{display:none}
.map-note{position:absolute;left:16px;bottom:12px;z-index:5;margin:0;max-width:min(520px,70%);font-size:12px;color:var(--muted);pointer-events:none}

/* 도시 확대: MapLibre 거리 지도 */
.map .city-map{position:absolute;inset:0;width:auto;height:auto;opacity:0;visibility:hidden;transition:opacity .35s ease,visibility 0s linear .35s;cursor:auto}
.map.ml-on .city-map{opacity:1;visibility:visible;transition:opacity .35s ease}
.map.ml-on{cursor:auto}
.map.ml-on .map-svg,.map.ml-on .cards{visibility:hidden}
.map.ml-on .map-tools{bottom:40px}
.map-note:empty{display:none!important}
.map.ml-on .map-note{bottom:auto;top:66px;left:16px;padding:4px 10px;border-radius:12px;background:var(--glass);box-shadow:var(--glass-shadow);color:var(--ink-2)}
.city-map .maplibregl-ctrl-attrib{font-family:var(--ko);font-size:12px}
.city-map .maplibregl-cooperative-gesture-screen{font-family:var(--ko)}

/* 도시 확대: 좌우 끝 이름표 + 연결선 */
.callouts{position:absolute;inset:0;z-index:4;pointer-events:none}
.callouts[hidden]{display:none}
.co-lines{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.co-lines path{fill:none;stroke:var(--ink-2);stroke-width:1.2;stroke-linejoin:round;opacity:.75}
.co-lines path.on{stroke:var(--ink);stroke-width:2.4;opacity:1}
.co-lines path.co-case{stroke:var(--card);stroke-width:4;opacity:.85}
.co-end{fill:var(--ink);stroke:var(--card);stroke-width:1.5}
.co-end.on{r:5px}
/* 묶음 고리: 묶인 점들을 감싼 테두리(lib/callouts.js ringPath). 선(.co-lines path)보다 앞서도록 클래스 둘로 쓴다. */
.co-lines .co-ring{fill:var(--ink-wash-2);stroke:var(--ink-2);stroke-width:1.2;stroke-dasharray:3 3;opacity:1}
.co-lines .co-ring.on{stroke:var(--ink);stroke-width:2}
.co{position:absolute;pointer-events:auto;display:flex;align-items:center;gap:8px;width:212px;height:40px;padding:0 10px 0 8px;border:1.5px solid var(--ink);border-radius:4px;background:var(--card);box-shadow:var(--shadow);text-align:left;color:var(--ink);font-size:13px;font-weight:700;line-height:1.25}
.co:hover{box-shadow:0 0 0 3px var(--signal),var(--shadow)}
.co.on{background:var(--signal)}
.co .bi{width:22px;height:22px}
.co-n{min-width:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:keep-all}
.co--group{border-style:dashed;background:var(--paper)}
.co--group .co-n{display:flex;flex-direction:column;line-height:1.2}
.co--group .co-n b{font-weight:700;font-size:13px}
.co--group .co-n small{font-size:12px;font-weight:500;color:var(--muted)}
/* 둘째 줄이 있는 이름표(지도 걸러 보기의 calloutSub, 예: 조식 정가 → 할인 뒤 금액): 이름은 한 줄로 자르고 요약을 아래에 */
.co--sub .co-n{display:flex;flex-direction:column;line-height:1.2}
.co--sub .co-n b{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:700}
.co--sub .co-n small{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:700;color:var(--ok)}
.co--sub.on .co-n small{color:var(--ink)}
.co-bis{display:flex;flex:none;gap:3px}
.co-bis .bi{width:18px;height:18px;border-radius:5px}

@media (max-width:900px){
  .panel-toggle{display:none}
  .stage.panel-off .panel{display:block}
  .stage{display:block}
  /* 폰: 한 손가락은 페이지 스크롤, 두 손가락은 지도(전국 지도는 country-map.js, 거리 지도는 MapLibre cooperativeGestures) */
  /* Short phones keep part of the city list on the first screen (2026-10-09). */
  .map{height:min(68vh,560px,calc(100svh - 230px));min-height:320px;border-bottom:1px solid var(--rule);scroll-margin-top:57px;touch-action:pan-x pan-y}
  .map-note{right:70px;max-width:none;bottom:10px;font-size:12px}
}
/* 폰 좌우 끝 이름표: 작은 로고 + 이름 한 줄. 폭은 이름 길이만큼(co--fit, 최대 NARROW_W 150px)이고 칸 바깥쪽 끝에 붙는다(lib/callouts.js fitWidth와 맞춘다). */
@media (max-width:639px){
  .co{width:150px;height:28px;gap:4px;padding:0 6px 0 4px;font-size:12px;line-height:1.2;border-width:1px}
  .co .bi{width:14px;height:14px;border-radius:3px}
  .co--fit{width:auto;max-width:150px}
  .co--fit .co-n{display:block;white-space:nowrap;text-overflow:ellipsis}
  .co--group .co-n b{font-size:12px}
  .co--group .co-n small{font-size:12px}
  .co-bis{gap:0}
  .co-bis .bi{width:14px;height:14px}
  .co-bis .bi+.bi{margin-left:-4px}
}
@media (max-width:560px){
  .map-note{display:none}
  .map.ml-on .map-note{display:block;top:62px;right:16px;font-size:12px}
}
@media (max-width:480px){
  .card{border-width:1px}
  .card-h b,.grow b{font-size:14px}
  .card-h .num,.grow>.num{font-size:15px}
  .card--compact{gap:7px;padding:4px 7px}
  .card--compact .card-h .num{font-size:15px}
  .pips{gap:6px}
  .pip{gap:2px;font-size:14px}
  .card--group{padding:2px}
  .grow{column-gap:5px;height:28px;padding:0 6px}
  .grow>.num{padding-right:7px}
  .grow .pips{padding-left:2px}
  .card--group.is-stack .grow{padding:3px 6px;row-gap:1px}
  .card--group.is-mini .grow{height:22px}
  .card--mini{padding:2px 6px}
  .card--mini .card-h b{font-size:13px}
}
@media (prefers-reduced-motion:reduce){.city-map{transition:none}}

/* World destination picker: MapLibre shares the city provider, list works offline. */
/* Outrank the later-loaded MapLibre .maplibregl-map position:relative rule. */
.map .world-map{position:absolute;inset:0;z-index:1}
.world-map[hidden],.world-message[hidden],.world-fallback[hidden]{display:none}
.world-live{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.world-message button[aria-disabled="true"]{opacity:.6;cursor:progress}
.world-fallback{position:absolute;inset:0;z-index:2;box-sizing:border-box;padding:12px 12px 124px;background:var(--sea);cursor:auto}
.world-fallback-svg{display:block;width:100%;height:100%;overflow:visible}
.world-fallback-svg path{fill:var(--paper-2);stroke:var(--muted);stroke-width:.45;vector-effect:non-scaling-stroke;cursor:pointer}
.world-fallback-svg path.is-supported{fill:color-mix(in oklch,var(--accent) 45%,var(--land))}
.world-fallback-svg path:hover,.world-fallback-svg path:focus-visible,.world-fallback-svg path.is-selected{fill:color-mix(in oklch,var(--accent) 70%,var(--land));stroke:var(--ink);stroke-width:2;outline:none}
.world-fallback-attribution{position:absolute;right:12px;top:8px;font-size:10px;color:var(--ink);background:var(--card);padding:2px 4px}
.world-fallback-on .map-note{display:none}
.world-on.world-fallback-on .map-tools{bottom:132px}
.world-message.is-fallback{top:auto;bottom:8px;transform:translateX(-50%);width:calc(100% - 32px);max-width:540px;box-sizing:border-box;padding:8px 10px}
.world-message.is-fallback p{font-size:12px;line-height:1.45;margin:0 0 4px}
.world-message.is-fallback button{margin:2px;padding:6px 9px;font-size:12px}
.world-on .map-svg,.world-on .cards,.world-on .callouts,.world-on .city-map{visibility:hidden}
.world-on .map-tools{bottom:44px}
.world-on .map-note{z-index:2;pointer-events:none;bottom:46px;max-width:calc(100% - 100px)}
.world-message{position:absolute;z-index:4;left:50%;top:45%;transform:translate(-50%,-50%);width:min(85%,390px);padding:18px;border:1px solid var(--rule);border-radius:8px;background:var(--card);box-shadow:var(--shadow);text-align:center;cursor:auto}
.world-message p{margin:0 0 12px;font-size:14px;line-height:1.6}
.world-message button{min-height:44px;padding:8px 12px;margin:3px;border:1px solid var(--rule);border-radius:5px;background:var(--paper);font:inherit;font-size:13px}
.world-picker{padding:16px 24px}
.world-picker>label{display:block;font-size:14px;font-weight:700;margin-bottom:8px}
.world-picker>input{width:100%;box-sizing:border-box;min-height:44px;border:1px solid var(--rule);border-radius:6px;padding:10px 12px;background:var(--card);color:var(--ink);font:inherit;font-size:15px}
.world-result-count{font-size:12px;color:var(--muted);margin:12px 0 6px}
.world-country-list{list-style:none;padding:0;margin:0}
.world-country{width:100%;min-height:58px;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 4px;text-align:left;border:0;border-bottom:1px solid var(--rule);background:transparent;color:var(--ink);font:inherit;cursor:pointer}
.world-country:hover,.world-country:focus-visible{background:var(--paper-2);outline:2px solid var(--ink);outline-offset:1px}
.world-country b{font-size:15px}.world-country small{display:block;font-size:12px;color:var(--muted);margin-top:4px;line-height:1.45}
.world-country>.num{flex:none;font-size:20px;font-weight:700}.world-country.supported b{color:var(--ink)}
.world-picker summary{min-height:44px;padding:14px 0;font-size:13px;cursor:pointer;box-sizing:border-box}
.world-selection{margin:8px 24px;padding:14px;border:1px solid var(--rule);border-radius:6px;background:var(--paper-2)}
.world-selection h2{font-size:19px;margin:0 0 8px}.world-selection p{font-size:13px;line-height:1.6;margin:5px 0}
.world-fine{padding:12px 24px;font-size:12px;line-height:1.6;color:var(--muted)}
@media(max-width:900px){.map.world-on{height:min(48svh,380px);min-height:260px}.world-picker{padding:16px 20px}.world-on .map-note{display:none}.world-message{padding:12px}.world-message p{font-size:13px}}
.world-message.is-warning{top:12px;transform:translateX(-50%);padding:10px 12px;width:min(80%,420px)}
.world-message.is-warning p{font-size:12px;margin-bottom:4px}
/* Regional inventory: one disclosure depth, global search skips the groups. */
.world-group{border-bottom:1px solid var(--rule)}
.world-group>summary{padding:15px 4px;min-height:64px;list-style-position:inside}
.world-group>summary b{font-size:16px}.world-group>summary small{display:block;margin:5px 0 0 18px;font-size:12px;line-height:1.5;color:var(--muted)}
.world-group[open]>summary{background:var(--paper-2)}
.world-country-main{display:block;width:100%;min-width:0}
.world-country-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}
.world-country-heading>.num{font-size:20px;font-weight:700;flex:none}
.world-chain-counts{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}
.world-chain-counts>span{display:inline-flex;align-items:center;gap:4px;padding:3px 5px;border:1px solid var(--rule);border-radius:4px;font-size:12px;line-height:1}
.world-chain-counts .bi{width:16px;height:16px}.world-chain-counts .bi img{width:100%;height:100%}
.world-group .world-country{padding:12px 6px}

/* Country shoreline sources remain visible in static SVG views and exports. */
.country-land-attribution{position:absolute;right:6px;bottom:3px;z-index:3;max-width:calc(100% - 12px);font-size:10px;line-height:1.3;text-align:right;background:var(--glass);color:var(--muted);padding:2px 4px;overflow-wrap:anywhere}
.country-land-attribution[hidden]{display:none}
.country-land-attribution a{color:inherit;text-decoration:underline}
/* Summary-only destination picker. MapLibre's absolute-position hotfix above
   stays more specific than the provider stylesheet. Country/city UI is scoped out. */
.destination-trigger.cpick{height:auto;min-height:44px;padding:9px 34px 9px 16px;font-size:14px;font-weight:700;white-space:nowrap}
.destination-stage{grid-template-columns:minmax(0,1fr) minmax(380px,420px);position:relative}
.destination-stage>.panel{overflow:hidden}
.destination-picker{height:100%;min-height:0;display:flex;flex-direction:column;font-size:14px}
.destination-header{flex:none;padding:16px 20px 12px;background:var(--card);border-bottom:1px solid var(--rule)}
.destination-controls{display:flex;align-items:center;gap:10px;min-height:44px}
.destination-controls h1{margin:0;flex:1;font-size:20px;line-height:1.4;font-weight:700;overflow-wrap:anywhere}
.destination-controls button,.destination-search button{flex:none;min-width:44px;min-height:44px;border:1px solid var(--rule);border-radius:8px;background:var(--paper);font-size:22px}
.destination-controls [hidden],.destination-search [hidden]{display:none}
.destination-search{margin-top:12px}
.destination-search label{display:block;font-size:12px;font-weight:700;margin-bottom:6px}
.destination-search>div{display:flex;gap:6px}
.destination-search input{width:100%;min-width:0;min-height:46px;border:1.5px solid var(--rule);border-radius:8px;padding:10px 12px;background:var(--paper);color:var(--ink);font:inherit;font-size:16px}
.destination-results{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:14px 20px max(18px,env(safe-area-inset-bottom));scrollbar-gutter:stable;touch-action:pan-y pinch-zoom}
.destination-results h3{font-size:13px;margin:2px 0 9px;color:var(--muted)}
.destination-regions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.destination-regions button{min-height:98px;padding:15px 12px;border:1px solid var(--rule);border-radius:12px;background:var(--paper);text-align:left;font-size:15px;line-height:1.5;overflow-wrap:anywhere}
.destination-regions button:hover,.destination-regions button:focus-visible{background:var(--signal-soft);border-color:var(--ink)}
.destination-regions small{display:block;font-size:11px;color:var(--muted);margin-top:8px}
.destination-all{width:100%;min-height:46px;margin-top:12px;padding:10px;border:1px solid var(--rule);border-radius:8px;background:var(--card);font-size:13px}
.destination-recent{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.destination-recent button{min-height:44px;padding:8px 12px;border:1px solid var(--rule);border-radius:22px;background:var(--card);font-size:13px}
/* 국가 칸: 좁은 목록에서도 두 줄로 나란히 놓이는 작은 칸(2026-10-16 운영자: 나라별 칸이 너무 큼). 손가락 누름 높이 44px 이상은 지킨다 */
.destination-results .world-country-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px}
.destination-results .world-country-list>li{min-width:0;border:1px solid var(--rule);border-radius:8px;background:var(--paper);overflow:clip}
.destination-results .world-country{height:100%;padding:8px 10px;border:0;min-height:48px;gap:8px}
.destination-results .world-country b{font-size:14px;overflow-wrap:anywhere}
.destination-results .world-country small{margin-top:2px;font-size:11.5px}
.destination-results .world-country-heading{gap:6px}
.destination-results .world-country>.num{font-size:14px}
.destination-results .world-country:hover,.destination-results .world-country:focus-visible{background:var(--signal-soft);outline-offset:-3px}
.destination-evidence{padding:0 14px 10px;font-size:12px;color:var(--muted)}
.destination-evidence>summary{min-height:44px;display:list-item;align-content:center;cursor:pointer;padding:10px 0}
.destination-evidence:not([open]){padding-bottom:0}
.destination-evidence p{margin:6px 0;line-height:1.6}
.destination-fine{padding:14px 0 0}
.destination-results .world-selection{margin:0 0 14px;padding:14px}
.destination-filter{padding:12px;border-radius:8px;background:var(--signal-soft);font-size:12px;line-height:1.6}
.destination-filter button{display:block;min-height:44px;margin-top:6px;border:1px solid var(--rule);border-radius:6px;background:var(--card);padding:8px 12px}
.destination-dialog{padding:0;border:1px solid var(--rule);border-radius:14px;background:var(--card);color:var(--ink);width:min(440px,calc(100vw - 24px));height:min(720px,calc(100dvh - 32px));max-height:calc(100dvh - 32px);overflow:hidden;box-shadow:var(--shadow)}
.destination-dialog::backdrop{background:var(--scrim)}
html:has(.destination-dialog[open]){overflow:hidden}
.world-fallback-islands circle{fill:var(--accent);stroke:var(--card);stroke-width:.5;cursor:pointer}
.world-fallback-islands circle.is-selected{fill:var(--signal);stroke:var(--ink)}
@media(max-width:900px){
 /* Phones: the map takes most of the screen and the destination list follows below it, so one finger scrolls the page
    (two fingers move the map). The full-screen picker dialog remains for the destination button. */
 .destination-stage{display:block;height:auto;overflow:visible}
 /* Short phones (e.g. 320×640): cap the map so the destination search still shows on the first screen (header ≈174px + search ≈104px). */
 .destination-stage>.map.world-on{position:relative;height:min(60svh,520px,calc(100svh - 280px));min-height:300px;border-bottom:1px solid var(--rule)}
 .destination-stage>.panel{display:block;overflow:visible}
 .destination-stage>.panel .destination-picker{height:auto}
 .destination-stage>.panel .destination-results{overflow:visible;flex:none}
 .destination-header{padding:8px max(16px,env(safe-area-inset-right)) 12px max(16px,env(safe-area-inset-left))}
 .destination-controls h1{font-size:18px}
 .destination-search{margin-top:6px}
 .destination-search label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
 .destination-results{padding:12px max(16px,env(safe-area-inset-right)) max(18px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));touch-action:pan-y pinch-zoom}
 .destination-stage .world-message.is-fallback{top:8px;bottom:auto;max-width:calc(100% - 24px);padding:6px 8px}
 .destination-stage .world-message.is-fallback p{font-size:11px}
 .destination-stage .world-fallback{padding:20px 8px 12px}
 .destination-stage .map-tools{top:12px;bottom:auto;z-index:5}
 .destination-dialog{position:fixed;inset:var(--destination-dialog-top,0px) 0 auto;margin:0;box-sizing:border-box;width:100%;max-width:none;height:var(--destination-dialog-height,100dvh);max-height:var(--destination-dialog-height,100dvh);padding:env(safe-area-inset-top) 0 0;border:0;border-radius:0;overflow:hidden}
 .destination-dialog .destination-picker{min-height:0;overflow:hidden}
 .destination-dialog .destination-regions button{min-height:84px}
}
@media(max-width:430px){.destination-regions{gap:8px}.destination-regions button{padding:12px 10px;font-size:14px}.destination-regions small{font-size:11px}}
@media(max-height:430px) and (max-width:900px){.destination-regions{grid-template-columns:1fr}.destination-header{padding-top:4px;padding-bottom:6px}.destination-search{margin-top:2px}}

/* Wide checkbox cards keep desktop catalogs compact; one scroll body stays usable at zoom/short heights. */
.brand-filter-trigger{min-height:44px;height:auto;padding:9px 14px;font-size:13px;max-width:290px;overflow:hidden;text-overflow:ellipsis}
.brand-filter-clear{min-width:44px;min-height:44px;justify-content:center;padding:6px;font-size:20px}
.brand-picker-dialog{width:min(1240px,calc(100vw - 48px));height:auto;max-width:none;max-height:min(860px,calc(100dvh - 32px));padding:0;border:1px solid var(--rule);border-radius:14px;background:var(--card);color:var(--ink);overflow:hidden;box-shadow:var(--shadow)}
.brand-picker-dialog[open]{display:flex;flex-direction:column}
.brand-picker-dialog::backdrop{background:var(--scrim)}
.brand-picker-head{display:flex;align-items:center;gap:16px;flex:none;padding:12px 20px;border-bottom:1px solid var(--rule)}
.brand-picker-head h2{margin:0;flex:1;min-width:0;font-size:19px;font-weight:700}
.brand-picker-head .brand-picker-guide{min-height:44px;max-width:45%;padding:6px 0;font-size:12px;line-height:1.5;text-align:right;overflow-wrap:anywhere}
.brand-picker-close{flex:none;min-width:44px;min-height:44px;border:1px solid var(--rule);border-radius:8px;background:var(--paper);color:var(--ink);font-size:23px}
.brand-picker-body{min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding:16px 20px 0;touch-action:pan-y pinch-zoom}
.brand-picker-toolbar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:16px}
.brand-picker-fields{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;min-width:0}
.brand-picker-fields label{display:flex;flex-direction:column;gap:5px;min-width:0;font-size:12px;font-weight:700}
.brand-picker-fields input,.brand-picker-fields select{width:100%;min-width:0;min-height:44px;border:1px solid var(--rule);border-radius:7px;padding:8px;background:var(--paper);color:var(--ink);font:inherit;font-size:16px}
.brand-picker-chain-control{display:flex;align-items:center;gap:8px;min-width:0}
.brand-picker-chain-mark{display:flex;align-items:center;flex:none}.brand-picker-chain-mark .bi{width:24px;height:24px}
.brand-picker-actions{display:flex;gap:8px;align-items:stretch}
.brand-picker-actions button{min-height:44px;max-width:210px;border:1px solid var(--rule);border-radius:7px;background:var(--paper);color:var(--ink);font:inherit;font-size:12px;line-height:1.4;padding:8px 12px;overflow-wrap:anywhere}
.brand-picker-actions button[aria-pressed="true"]{background:var(--signal-soft);border-color:var(--ink)}
.brand-picker-meta{display:flex;align-items:baseline;gap:12px;margin:12px 0}
.brand-picker-selection{flex:none;margin:0;font-size:12px;font-weight:700;color:var(--ink)}
.brand-picker-note{margin:0;font-size:12px;line-height:1.6;color:var(--muted)}
.brand-options{min-width:0;margin:0;padding:0;border:0}
.brand-options legend{font-size:12px;font-weight:700;margin-bottom:8px;padding:0}
.brand-picker-result-count{margin-inline-start:10px;color:var(--muted);font-weight:400}
.brand-option-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
.brand-option{display:flex;align-items:center;gap:8px;min-width:0;min-height:64px;padding:10px;border:1px solid var(--rule);border-radius:9px;background:var(--paper);cursor:pointer}
.brand-option input{width:20px;height:20px;margin:0;flex:none;accent-color:var(--ink)}
.brand-option>span:first-of-type{min-width:0;flex:1;font-size:13px;line-height:1.5;overflow-wrap:anywhere}
.brand-option small{display:block;font-size:11px;color:var(--muted);margin-top:4px}
.brand-option>.num{font-size:15px;font-weight:700;min-width:24px;text-align:right;overflow-wrap:anywhere}
.brand-option:has(input:checked){background:var(--signal-soft);border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.brand-option:focus-within{outline:2px solid var(--ink);outline-offset:2px}
.brand-picker-empty{grid-column:1/-1;margin:0;padding:24px 0;color:var(--muted)}
.brand-picker-foot{margin-top:12px;padding:0 0 max(8px,env(safe-area-inset-bottom));border-top:1px solid var(--rule);font-size:12px;color:var(--muted);line-height:1.6}
.brand-picker-foot p{margin:4px 0 8px}.brand-picker-foot summary{min-height:44px;align-content:center;cursor:pointer}
/* 5대 체인·호텔 컬렉션 브랜드 선택 공통 바닥 줄(2026-10-13): 선택 상태 + 주 버튼(5대 체인은 바로 반영돼 「완료」, 컬렉션은 「적용」) */
.brand-picker-bar{display:flex;align-items:center;gap:12px;flex:none;padding:10px 20px max(10px,env(safe-area-inset-bottom));border-top:1px solid var(--rule);background:var(--card)}
.brand-picker-bar p{flex:1;min-width:0;margin:0;font-size:13px;font-weight:700}
.brand-picker-bar .primary{min-height:44px;padding:0 22px;border:1px solid var(--ink);border-radius:8px;background:var(--ink);color:var(--card);font:inherit;font-size:13px;font-weight:700;cursor:pointer}
.brand-picker-scope{display:flex;align-items:center;gap:8px;min-height:44px;padding:8px;border:1px solid var(--rule);border-radius:7px;background:var(--paper-2);font-size:14px;font-weight:700;min-width:0;overflow-wrap:anywhere}
@media(max-width:1199px){.brand-option-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.brand-picker-toolbar{grid-template-columns:1fr}.brand-picker-actions button{max-width:none;flex:1}.brand-picker-actions{justify-self:stretch}}
@media(max-width:999px){.brand-option-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:759px){.brand-picker-dialog{width:calc(100vw - 24px);max-height:calc(100dvh - 24px)}.brand-option-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.brand-picker-head{padding:10px 14px;gap:10px}.brand-picker-body{padding:12px 14px 0}.brand-picker-meta{display:block}.brand-picker-selection{margin-bottom:4px}}
@media(max-width:519px){.brand-option-grid{grid-template-columns:1fr}.brand-picker-fields{grid-template-columns:1fr}.brand-picker-toolbar{gap:10px}.brand-picker-head .brand-picker-guide{font-size:11px}.brand-option{min-height:56px}.brand-picker-actions button{padding:8px}.brand-picker-dialog{max-height:calc(100dvh - 16px)}}
@media(max-height:500px){.brand-picker-head{padding-top:6px;padding-bottom:6px}.brand-picker-body{padding-top:10px}}
@media(forced-colors:active){.brand-option:has(input:checked){border-color:Highlight;outline:1px solid Highlight;outline-offset:-3px}.brand-option:focus-within{outline:2px solid Highlight;outline-offset:2px}}

/* Country count pills (web/js/lib/map-count-overlay.js), shared by the collection
   maps and the five-chain world brand view. */
.directory-country-counts{position:absolute;inset:0;pointer-events:none;container-type:inline-size}
.directory-country-counts[hidden],.directory-country-count[hidden],.directory-count-hint[hidden],.directory-count-detail[hidden]{display:none}
.directory-count-leaders{position:absolute;inset:0;width:100%;height:100%;overflow:hidden;pointer-events:none}
.directory-count-leaders path{fill:none;stroke:var(--muted);stroke-width:1;stroke-opacity:.65;vector-effect:non-scaling-stroke}
.directory-count-leaders circle{fill:var(--muted);stroke:var(--card);stroke-width:1;vector-effect:non-scaling-stroke}
.directory-count-leaders .is-highlighted path{stroke:var(--ink);stroke-width:1.5;stroke-opacity:1}
.directory-count-leaders .is-highlighted circle{fill:var(--ink)}
.directory-country-count{position:absolute;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:max-content;min-width:44px;min-height:44px;padding:7px 0;border:0;border-radius:999px;background:transparent;color:var(--ink);pointer-events:auto;cursor:pointer;font:inherit;line-height:1.2;-webkit-tap-highlight-color:transparent}
.directory-count-pill{display:flex;align-items:center;gap:5px;box-sizing:border-box;min-width:44px;min-height:30px;padding:3px 4px 3px 9px;border:1px solid var(--rule);border-radius:999px;background:var(--card);box-shadow:var(--glass-shadow)}
.directory-count-name{display:block;min-width:0;max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600;line-height:1.3}
.directory-country-count strong{display:flex;align-items:center;justify-content:center;flex:none;box-sizing:border-box;min-width:22px;min-height:22px;padding:1px 5px;border-radius:999px;background:var(--paper-2);color:var(--ink);font-family:var(--num);font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1}
.directory-country-count:hover .directory-count-pill,.directory-country-count.is-highlighted .directory-count-pill{border-color:var(--ink);background:var(--signal-soft)}
.directory-country-count.is-highlighted strong{background:var(--ink);color:var(--card)}
.directory-country-count:active .directory-count-pill{background:var(--signal);box-shadow:inset 0 0 0 1px var(--ink)}
.directory-country-count:focus-visible{outline:3px solid var(--ink);outline-offset:0}
.directory-count-hint,.directory-count-detail{position:absolute;bottom:var(--count-hint-bottom,20px);left:10px;right:var(--count-hint-right,10px);width:fit-content;max-width:calc(100% - 10px - var(--count-hint-right,10px));box-sizing:border-box;margin:0;padding:5px 9px;border:1px solid var(--rule);border-radius:8px;background:var(--card);color:var(--muted);font-size:12px;line-height:1.4;pointer-events:none}
.directory-count-detail{color:var(--ink);font-weight:600;border-color:var(--ink);overflow-wrap:anywhere}
@container(max-width:560px){.directory-count-name{max-width:76px}}
@media(forced-colors:active){.directory-count-pill{border-color:ButtonText;background:ButtonFace;color:ButtonText}.directory-country-count strong{background:ButtonFace;color:ButtonText}.directory-country-count.is-highlighted .directory-count-pill{border-color:Highlight}.directory-country-count.is-highlighted strong{background:Highlight;color:HighlightText}.directory-count-leaders path{stroke:CanvasText}.directory-count-leaders circle{fill:CanvasText;stroke:Canvas}.directory-country-count:focus-visible{outline-color:Highlight}}

/* World map brand view (web/js/world-map.js): count pills sit above the map
   canvas and fallback, below the status message and zoom tools. */
.map>.world-brand-counts{z-index:3}
.world-fallback-svg path.is-brand{fill:color-mix(in oklch,var(--accent) 80%,var(--land))}
.world-brand{margin:4px 0 16px;padding:14px;border:1px solid var(--rule);border-radius:8px;background:var(--card)}
.world-brand h2{margin:0 0 6px;font-size:16px;line-height:1.45}
.world-brand h3{margin:14px 0 6px;font-size:13px;color:var(--muted)}
.world-brand p{margin:0;font-size:12px;line-height:1.55;color:var(--muted)}
.world-brand-list,.world-brand-group ul{list-style:none;padding:0;margin:0}
.world-brand-group{padding:10px 0;border-top:1px solid var(--rule)}
.world-brand-country-head,.world-brand-country{display:flex;justify-content:space-between;align-items:center;gap:10px}
.world-brand-country-head b,.world-brand-country b{font-size:14px}
.world-brand .num{font-family:var(--num);font-weight:700;font-size:15px}
.world-brand-country{width:100%;min-height:44px;padding:8px 4px;border:0;border-top:1px solid var(--rule);background:transparent;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.world-brand-country:hover,.world-brand-country:focus-visible{background:var(--paper-2)}
.world-brand-group li{display:flex;flex-direction:column;padding:4px 0 4px 10px}
.world-brand-hotel{align-self:flex-start;min-height:28px;padding:2px 0;border:0;background:none;color:var(--ink);font:inherit;font-size:13px;font-weight:600;text-align:left;cursor:pointer}
.world-brand-hotel:hover,.world-brand-hotel:focus-visible{text-decoration:underline}
.world-brand-group small{font-size:11px;color:var(--muted);line-height:1.4}
.world-brand-group .text-link{margin:6px 0 0 10px;min-height:32px;padding:0;border:0;background:none;color:var(--ink);font:inherit;font-size:12px;text-decoration:underline;cursor:pointer}
@media(forced-colors:active){.world-fallback-svg path.is-brand{fill:Highlight}}
