/* ===== Hotel workspace primitives ===== */
.region-mode-tabs{display:flex;align-items:center;gap:6px;padding:4px;background:#ece7da;border-radius:12px}
.region-mode{border:0;background:transparent;border-radius:9px;padding:7px 10px;font-size:12px;font-weight:900;color:#6b665d}
.region-mode.on{background:#fff;color:#175ea9;box-shadow:0 2px 9px rgba(40,36,25,.08)}
.hotel-map-view{position:absolute;inset:0;background:linear-gradient(180deg,#eaf4fb 0,#dfeef7 100%);overflow:hidden}
#hotelOverviewSvg{width:100%;height:100%;display:block}
.hotel-region-shape{fill:#f9fbfc;stroke:#a8bac8;stroke-width:2;vector-effect:non-scaling-stroke}
.hotel-pin{cursor:pointer;outline:none}
.hotel-pin circle{fill:#175ea9;stroke:#fff;stroke-width:3;vector-effect:non-scaling-stroke;filter:drop-shadow(0 3px 4px rgba(25,50,75,.22))}
.hotel-pin.selected circle{fill:#d93a3a;stroke-width:4}
.hotel-pin text{font-size:10px;font-weight:1000;fill:#fff;text-anchor:middle;dominant-baseline:central;pointer-events:none}
.hotel-pin-label{font-size:10px!important;font-weight:900!important;fill:#263746!important;text-anchor:start!important;dominant-baseline:auto!important;paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round;pointer-events:none}
.hotel-map-note{position:absolute;left:12px;bottom:12px;background:rgba(255,255,255,.92);border:1px solid rgba(50,80,105,.16);border-radius:10px;padding:7px 9px;font-size:10px;font-weight:850;color:#52616c;box-shadow:0 4px 14px rgba(20,40,60,.08)}
.hotel-map-empty{position:absolute;inset:0;display:grid;place-items:center;padding:24px;text-align:center;color:#65727d;font-size:13px;font-weight:800;line-height:1.7}
.hotel-source{border:1px solid #e1dac9;border-radius:13px;background:#f7f4eb;padding:10px 11px;margin-bottom:12px;font-size:10px;line-height:1.55;color:#6c675e}
.hotel-source strong{display:block;color:#3e3b36;font-size:11px;margin-bottom:3px}
.hotel-source a{color:#175ea9;text-decoration:none;font-weight:900}
.hotel-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:10px}
.hotel-summary div{background:#f1ecdf;border-radius:11px;padding:9px 8px;text-align:center}
.hotel-summary strong{display:block;font-size:18px;line-height:1}.hotel-summary span{display:block;margin-top:4px;font-size:9px;color:#777268;font-weight:900}
.hotel-search{width:100%;border:1px solid #d9d1bf;background:white;border-radius:11px;padding:9px 10px;font-size:12px;outline:none;margin-bottom:8px}
.hotel-filters{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.hotel-filter{border:1px solid #ddd5c3;background:#fff;border-radius:999px;padding:6px 9px;font-size:10px;font-weight:900;color:#625d54}
.hotel-filter.on{background:#31363e;color:#fff;border-color:#31363e}
.hotel-list{display:grid;gap:8px;margin-bottom:14px}
.hotel-card{border:1px solid #ded7c6;background:#fff;border-radius:13px;padding:10px 11px;text-align:left;color:#333;cursor:pointer}
.hotel-card:hover{border-color:#bfc8d0;box-shadow:0 5px 16px rgba(40,50,60,.06)}
.hotel-card.selected{outline:2px solid #175ea9;outline-offset:1px}
.hotel-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.hotel-card strong{font-size:12px;line-height:1.35}
.hotel-city{font-size:9px;color:#7a756b;font-weight:900;margin-top:3px}
.hotel-badges{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}
.hotel-badge{font-size:9px;font-weight:900;border-radius:999px;padding:3px 6px;background:#eee9dd;color:#6e685e}
.hotel-badge.on{background:#dff1e8;color:#1d7954}
.hotel-badge.warn{background:#fff0d5;color:#9a6100}
.hotel-detail{border-top:1px solid #ece5d6;padding-top:13px}
.hotel-detail h3{font-size:18px;margin:0 0 4px;line-height:1.3}
.hotel-detail .hotel-ja{font-size:10px;color:#777268;font-weight:850;margin-bottom:10px}
.hotel-detail dl{display:grid;grid-template-columns:72px minmax(0,1fr);gap:6px 9px;font-size:11px;line-height:1.55;margin:0 0 10px}
.hotel-detail dt{font-weight:900;color:#777268}.hotel-detail dd{margin:0;font-weight:800;overflow-wrap:anywhere}
.mapcode-box{border:1px solid #d8d1bf;background:#f7f4eb;border-radius:12px;padding:10px;margin:10px 0}
.mapcode-title{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px;font-weight:900;color:#706a60}
.mapcode-value{font-size:19px;letter-spacing:.03em;font-weight:1000;margin-top:4px;color:#2f3338}
.mapcode-value.unverified{font-size:13px;letter-spacing:0;color:#9a6100}
.hotel-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.hotel-action{border:1px solid #d5cebc;background:#fff;border-radius:9px;padding:7px 9px;font-size:10px;font-weight:900;color:#4d4942;text-decoration:none}
.hotel-action.primary{background:#175ea9;border-color:#175ea9;color:#fff}
.hotel-action.mapcode{background:#2f3338;border-color:#2f3338;color:#fff}
.hotel-state-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:10px}
.hotel-state{border:0;border-radius:9px;padding:8px 6px;background:#ebe6da;color:#665f55;font-size:10px;font-weight:900}
.hotel-state.on{background:#1d8558;color:#fff}
.hotel-toast{position:fixed;left:50%;bottom:22px;transform:translateX(-50%) translateY(10px);z-index:150;background:#20262e;color:#fff;border-radius:999px;padding:9px 13px;font-size:11px;font-weight:850;opacity:0;pointer-events:none;transition:.18s}
.hotel-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
@media(max-width:900px){.region-mode-tabs{order:-1}.hotel-summary{grid-template-columns:repeat(3,1fr)}.hotel-detail h3{font-size:17px}}


.hotel-address-link{color:#175ea9;font-weight:900;text-decoration:none;line-height:1.55}
.hotel-address-link:hover{text-decoration:underline}
.mapcode-link{display:block;width:100%;border:0;background:transparent;text-align:left;padding:0;cursor:pointer}
.mapcode-link:hover{text-decoration:underline}
/* ===== Region map pan / zoom ===== */
.region-map-wrap{touch-action:none;cursor:grab}
.region-map-wrap.map-panning{cursor:grabbing}
#regionSvg{user-select:none}
.map-nav{
  position:absolute;right:12px;top:12px;z-index:12;
  display:flex;align-items:center;gap:5px;
  background:rgba(255,255,255,.94);border:1px solid rgba(55,70,85,.16);
  border-radius:12px;padding:5px;box-shadow:0 5px 18px rgba(35,50,65,.13)
}
.map-nav button{
  width:34px;height:34px;border:0;border-radius:8px;background:#fff;color:#39444d;
  font-size:18px;font-weight:900;line-height:1
}
.map-nav button:hover{background:#edf3f7}
.map-nav .map-reset{width:auto;min-width:54px;padding:0 9px;font-size:10px}
.map-nav-level{
  min-width:42px;text-align:center;font-size:10px;font-weight:900;color:#68737c;
  font-variant-numeric:tabular-nums
}
.map-gesture-hint{
  position:absolute;left:12px;top:12px;z-index:11;
  background:rgba(32,38,46,.80);color:#fff;border-radius:999px;
  padding:6px 9px;font-size:9px;font-weight:850;pointer-events:none;
  opacity:.86
}
@media(max-width:700px){
  .map-nav{right:7px;top:7px}
  .map-nav button{width:31px;height:31px}
  .map-nav .map-reset{min-width:48px}
  .map-gesture-hint{left:7px;top:7px;font-size:8px}
}

/* ===== v9 region workspace ===== */
.region-zoom-card{
  position:relative;
  width:min(1380px,97vw);
  height:min(940px,96vh);
  grid-template-rows:auto minmax(0,1fr)!important;
}
.region-zoom-head{padding:12px 16px}
.region-zoom-body{grid-template-columns:minmax(0,1fr) 360px}
.unified-region-side{
  overflow:hidden;padding:0;display:grid;grid-template-rows:auto minmax(0,1fr);background:#fffdf8
}
.region-side-overview{padding:12px 13px 8px;border-bottom:1px solid #e8e1d2}
.unified-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin-bottom:8px}
.unified-summary div{background:#f1ecdf;border-radius:10px;padding:8px 5px;text-align:center}
.unified-summary strong{display:block;font-size:16px;line-height:1.05}
.unified-summary span{display:block;margin-top:3px;font-size:8px;color:#777268;font-weight:900}
.compact-progress{padding:8px 9px;margin:0 0 8px;border-radius:10px}
.compact-progress .region-progress-top{align-items:center}
.compact-progress .region-progress-top span{font-size:9px}
.compact-progress .bar{margin-top:5px;height:6px}
.region-pref-list{margin-bottom:6px;max-height:70px;overflow:auto}
.region-chip{padding:5px 7px;font-size:9px}
.region-empty{padding:6px 0;font-size:10px}
.compact-region-detail{padding:8px 0 2px;margin-top:3px}
.compact-region-title{display:flex;align-items:center;justify-content:space-between;gap:8px}
.compact-region-detail h3{font-size:15px;margin:0}
.compact-region-detail .zh{font-size:9px;margin:1px 0 5px}
.compact-region-detail dl{grid-template-columns:42px 1fr;gap:3px 6px;font-size:9px;margin-bottom:5px}
.compact-region-detail p{font-size:9px;line-height:1.45;margin-bottom:7px;max-height:42px;overflow:auto}
.compact-region-detail .open-full{font-size:9px;padding:6px 8px}
.compact-region-detail .quick-collect{font-size:9px;padding:6px 8px}
.hotel-browser{min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto;overflow:hidden}
.hotel-browser-head{padding:9px 12px 7px;background:#fffdf8;border-bottom:1px solid #eee7d8}
.hotel-browser-head .hotel-search{margin:0 0 6px}
.hotel-browser-head .hotel-filters{margin:0}
.hotel-list-scroll{min-height:0;overflow:auto;padding:8px 10px}
.hotel-list{margin:0}
.hotel-card{padding:8px 9px;border-radius:11px}
.hotel-card strong{font-size:11px}
.compact-source{margin:0;border:0;border-top:1px solid #eee7d8;border-radius:0;padding:7px 10px;font-size:8px;line-height:1.35}
.integrated-map-legend{
  position:absolute;left:12px;bottom:12px;z-index:10;display:flex;gap:8px;flex-wrap:wrap;
  background:rgba(255,255,255,.93);border:1px solid rgba(50,80,105,.14);
  border-radius:10px;padding:7px 9px;font-size:9px;font-weight:900;color:#52616c;
  box-shadow:0 4px 14px rgba(20,40,60,.08);pointer-events:none
}
.integrated-map-legend span{display:flex;align-items:center;gap:5px}
.integrated-map-legend i{display:inline-block;flex:none}
.legend-badge{width:14px;height:9px;border-radius:2px;background:#2AA8D6}
.legend-hotel{width:10px;height:10px;border-radius:50%;background:#175ea9;border:2px solid #fff;box-shadow:0 0 0 1px #175ea9}
#regionSvg .region-shape{pointer-events:none!important;cursor:default!important}
.hotel-pins-layer{pointer-events:auto}
.hotel-pin{pointer-events:auto!important;cursor:pointer;outline:none}
.hotel-pin-hit{fill:rgba(0,0,0,0)!important;stroke:none;pointer-events:all}
.hotel-pin-dot{
  fill:#1769aa;stroke:#fff;stroke-width:2.2;vector-effect:non-scaling-stroke;
  filter:drop-shadow(0 2px 3px rgba(20,48,75,.24));pointer-events:all
}
.hotel-pin-number{
  font-size:7px!important;font-weight:1000!important;fill:#fff!important;text-anchor:middle!important;
  dominant-baseline:central!important;pointer-events:none!important
}
.hotel-pin-label{
  font-size:7px!important;font-weight:900!important;fill:#263746!important;text-anchor:start!important;
  paint-order:stroke;stroke:#fff;stroke-width:2.5px;stroke-linejoin:round;vector-effect:non-scaling-stroke;
  pointer-events:none!important
}
.hotel-pin.selected .hotel-pin-dot{fill:#dc3540;stroke-width:3}
.hotel-pin:hover .hotel-pin-dot{stroke-width:3;filter:drop-shadow(0 3px 4px rgba(20,45,70,.34))}

/* ===== v9 merged hotel + badge popup ===== */
.hotel-badge-popup{
  position:absolute;z-index:90;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(760px,calc(100% - 44px));max-height:min(700px,calc(100% - 44px));
  background:#fffdf8;border:1px solid rgba(50,45,35,.18);border-radius:20px;
  box-shadow:0 28px 80px rgba(16,25,38,.34);overflow:hidden
}
.hotel-badge-popup[hidden]{display:none!important}
.hotel-badge-popup-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:15px 17px 12px;border-bottom:1px solid #e8e1d2;background:#fff}
.hotel-badge-popup-head h3{margin:2px 0 0;font-size:22px;line-height:1.15}
.hotel-badge-kicker{font-size:9px;font-weight:900;letter-spacing:.06em;color:#777168}
.hotel-badge-popup-close{width:34px;height:34px;border:0;border-radius:50%;background:#f0ece2;color:#555;font-size:23px;line-height:1;flex:none}
.hotel-badge-popup-body{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);max-height:calc(min(700px,100vh - 70px) - 64px);overflow:auto}
.hotel-popup-pane{min-width:0;padding:16px 17px 18px}
.hotel-popup-pane + .hotel-popup-pane{border-left:1px solid #ece5d6}
.hotel-popup-pane h4{margin:0 0 11px;font-size:15px}
.popup-address{display:block;font-size:12px;line-height:1.55;margin-bottom:10px}
.popup-meta{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:10px;color:#746f66;font-weight:800;margin-bottom:13px}
.popup-meta b{color:#37342f}
.popup-mapcode{background:#f3efe4;border-radius:13px;padding:11px 12px;margin-bottom:10px}
.popup-mapcode .mapcode-value{font-size:24px;line-height:1.1;margin-top:4px}
.popup-mapcode small{display:block;color:#8b8579;font-size:9px;margin-top:4px}
.popup-nav-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.popup-nav-actions .hotel-action{min-height:36px;display:flex;align-items:center;justify-content:center;text-align:center}
.popup-trip-state{margin-top:14px;padding-top:12px;border-top:1px solid #ece5d6}
.popup-trip-state>span{display:block;font-size:10px;font-weight:900;color:#777168;margin-bottom:7px}
.popup-trip-state .hotel-state-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.badge-popup-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px}
.badge-popup-title-row h4{margin:2px 0 0;font-size:17px}
.compact-field{margin-top:8px}.compact-field textarea{min-height:58px}
.popup-photo-box{min-height:105px}.popup-photo-box img{max-height:170px}
.ui-version{display:inline-block;margin-left:6px;padding:2px 5px;border-radius:999px;background:#2b3640;color:#fff;font-size:8px;font-weight:900;vertical-align:1px}

@media(max-width:900px){
  .region-zoom-card{height:98vh}
  .region-zoom-body{grid-template-columns:1fr;grid-template-rows:minmax(330px,56%) minmax(0,44%)}
  .unified-region-side{border-left:0;border-top:1px solid #e5dece}
}
@media(max-width:760px){
  .hotel-badge-popup{width:calc(100% - 18px);max-height:calc(100% - 18px);border-radius:15px}
  .hotel-badge-popup-body{grid-template-columns:1fr;max-height:calc(100vh - 110px)}
  .hotel-popup-pane + .hotel-popup-pane{border-left:0;border-top:1px solid #ece5d6}
}
@media(max-width:620px){
  .region-zoom-head{padding:9px 10px}.region-nav-arrows{display:none}
  .region-zoom-body{grid-template-rows:minmax(280px,48%) minmax(0,52%)}
}
