*{margin:0;padding:0;box-sizing:border-box}:root{--sidebar-width: 420px;--color-strong: #16a34a;--color-good: #2563eb;--color-marginal: #d97706;--color-text: #1f2937;--color-text-secondary: #6b7280;--color-border: #e5e7eb;--color-bg: #ffffff;--color-bg-secondary: #f9fafb;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1)}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--color-text);line-height:1.5;height:100vh;overflow:hidden}#app{display:flex;height:100vh;width:100vw;overflow:hidden}#sidebar{width:var(--sidebar-width);height:100vh;display:flex;flex-direction:column;background:var(--color-bg);border-right:1px solid var(--color-border);z-index:10;overflow:hidden}.sidebar-header{padding:24px;border-bottom:1px solid var(--color-border);background:var(--color-bg)}.sidebar-header h1{font-size:1.5rem;font-weight:700;color:var(--color-text)}.sidebar-header .subtitle{font-size:.875rem;color:var(--color-text-secondary);margin-top:4px}#sidebar-content{flex:1;overflow-y:auto;padding:16px}.verdict-group{margin-bottom:24px}.verdict-group:last-child{margin-bottom:0}.verdict-header{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--color-border)}.verdict-badge{display:inline-flex;align-items:center;padding:4px 10px;border-radius:9999px;font-size:.75rem;font-weight:600;color:#fff}.verdict-badge.strong{background:var(--color-strong)}.verdict-badge.good{background:var(--color-good)}.verdict-badge.marginal{background:var(--color-marginal)}.verdict-count{font-size:.75rem;color:var(--color-text-secondary)}.hotel-card{background:var(--color-bg);border:1px solid var(--color-border);border-radius:8px;padding:16px;display:flex;gap:12px;margin-bottom:12px;cursor:pointer;transition:all .15s ease}.hotel-card:hover{border-color:#d1d5db;box-shadow:var(--shadow-md)}.hotel-card:last-child{margin-bottom:0}.hotel-card-thumb{width:84px;height:84px;border-radius:8px;overflow:hidden;background:var(--color-bg-secondary);border:1px solid var(--color-border);flex-shrink:0}.hotel-card-thumb img{width:100%;height:100%;object-fit:cover;display:block}.hotel-thumb-placeholder{width:100%;height:100%;background:linear-gradient(135deg,#e5e7eb,#f8fafc)}.hotel-card-body{flex:1;min-width:0}.hotel-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:8px}.hotel-name{font-size:1rem;font-weight:600;color:var(--color-text)}.hotel-neighborhood{font-size:.75rem;color:var(--color-text-secondary);margin-top:2px}.hotel-scores{display:flex;gap:8px;font-size:.75rem}.score-item{display:flex;align-items:center;gap:4px;color:var(--color-text-secondary)}.score-value{font-weight:600;color:var(--color-text)}.hotel-meta{display:flex;align-items:center;gap:12px;margin-top:12px;padding-top:12px;border-top:1px solid var(--color-border);font-size:.75rem;color:var(--color-text-secondary)}.hotel-meta-item{display:flex;align-items:center;gap:4px}.price-meta .price-note{font-size:.7rem;color:var(--color-text-secondary)}.detail-view{padding-bottom:24px}.detail-back{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;margin-bottom:16px;background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:6px;font-size:.875rem;color:var(--color-text-secondary);cursor:pointer;transition:all .15s ease}.detail-back:hover{background:var(--color-border);color:var(--color-text)}.detail-header{margin-bottom:20px}.detail-name{font-size:1.5rem;font-weight:700;color:var(--color-text);margin-bottom:4px}.detail-address{font-size:.875rem;color:var(--color-text-secondary);margin-bottom:12px}.detail-badges{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.detail-badge{display:inline-flex;align-items:center;padding:4px 10px;border-radius:6px;font-size:.75rem;font-weight:500}.detail-badge.verdict{color:#fff}.detail-badge.price,.detail-badge.rating{background:var(--color-bg-secondary);border:1px solid var(--color-border);color:var(--color-text)}.detail-price-note{display:flex;flex-wrap:wrap;gap:8px;font-size:.75rem;color:var(--color-text-secondary);margin-top:-8px}.detail-price-note a{color:var(--color-text);text-decoration:underline}.detail-gallery{margin-bottom:20px}.detail-gallery-main img{width:100%;max-height:320px;object-fit:cover;border-radius:12px;border:1px solid var(--color-border);cursor:pointer;display:block}.detail-gallery-thumbs{display:flex;gap:8px;margin-top:10px;overflow-x:auto;padding-bottom:4px}.detail-thumb{border:1px solid var(--color-border);background:none;padding:0;width:64px;height:64px;border-radius:10px;overflow:hidden;cursor:pointer;flex-shrink:0}.detail-thumb img{width:100%;height:100%;object-fit:cover;display:block}.detail-thumb.active{border-color:var(--color-text)}.photo-lightbox{position:fixed;top:0;right:0;bottom:0;left:0;display:none;align-items:center;justify-content:center;z-index:1000}.photo-lightbox.open{display:flex}.photo-lightbox-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#0f172abf}.photo-lightbox-content{position:relative;z-index:1;display:flex;align-items:center;gap:16px;max-width:90vw;max-height:90vh}.photo-lightbox-image{max-width:80vw;max-height:80vh;border-radius:12px;box-shadow:0 20px 50px #0006;display:block}.photo-lightbox-close{position:absolute;top:-44px;right:0;width:32px;height:32px;border-radius:50%;border:none;background:#ffffffe6;font-size:20px;cursor:pointer}.photo-lightbox-nav{width:36px;height:36px;border-radius:50%;border:none;background:#ffffffe6;font-size:22px;cursor:pointer}.photo-lightbox-count{position:absolute;bottom:-28px;left:50%;transform:translate(-50%);color:#f8fafc;font-size:.75rem}.route-info{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:8px;padding:16px;margin-bottom:20px}.route-info-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.route-info-header svg{width:20px;height:20px;color:#6366f1}.route-info-title{font-size:.875rem;font-weight:600;color:var(--color-text)}.route-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:16px}.route-stat{display:flex;flex-direction:column}.route-stat-value{font-size:1.25rem;font-weight:700;color:var(--color-text)}.route-stat-label{font-size:.75rem;color:var(--color-text-secondary)}.route-station{margin-top:12px;padding-top:12px;border-top:1px solid var(--color-border);font-size:.75rem;color:var(--color-text-secondary)}.scores-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:20px}.score-card{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:8px;padding:12px}.score-card-label{font-size:.75rem;color:var(--color-text-secondary);margin-bottom:4px}.score-card-value{font-size:1.25rem;font-weight:700;color:var(--color-text)}.detail-section{margin-bottom:20px}.detail-section-title{font-size:.875rem;font-weight:600;color:var(--color-text);margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--color-border)}.detail-section-content{font-size:.875rem;color:var(--color-text-secondary);line-height:1.6}.detail-list{list-style:none}.detail-list li{position:relative;padding-left:16px;margin-bottom:8px;font-size:.875rem;color:var(--color-text-secondary)}.detail-list li:before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;border-radius:50%;background:var(--color-border)}.detail-list.strengths li:before{background:var(--color-strong)}.detail-list.weaknesses li:before{background:var(--color-marginal)}#map-container{flex:1;position:relative}#map{width:100%;height:100%}#map-drawer-handle{width:64px;height:8px;border-radius:999px;border:none;background:#0f172a40;margin:10px auto 6px;cursor:pointer;display:none}.pte-marker{width:40px;height:40px;border-radius:8px;object-fit:cover;box-shadow:0 6px 18px #0f172a40}.hotel-marker{cursor:pointer}.hotel-marker-content{display:flex;align-items:center;gap:6px;font-family:Inter,sans-serif;white-space:nowrap}.hotel-marker-circle{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:.75rem;font-weight:700;box-shadow:0 2px 4px #0003;flex-shrink:0}.hotel-marker-circle.strong{background:var(--color-strong)}.hotel-marker-circle.good{background:var(--color-good)}.hotel-marker-circle.marginal{background:var(--color-marginal)}.hotel-marker-name{font-size:.75rem;font-weight:600;color:var(--color-text);text-shadow:-1px -1px 0 white,1px -1px 0 white,-1px 1px 0 white,1px 1px 0 white,0 0 4px white}.station-marker{cursor:pointer;position:relative;width:0;height:0}.elizabeth-line-icon{width:22px;height:22px;display:block;filter:drop-shadow(0 2px 3px rgba(0,0,0,.2));position:absolute;left:0;top:0;transform:translate(-50%,-50%)}.station-marker-name{position:absolute;left:17px;top:0;transform:translateY(-50%);font-size:.75rem;font-weight:600;color:var(--color-text);font-family:Inter,sans-serif;white-space:nowrap;text-shadow:-1px -1px 0 white,1px -1px 0 white,-1px 1px 0 white,1px 1px 0 white,0 0 4px white}.loading{display:flex;align-items:center;justify-content:center;padding:40px;color:var(--color-text-secondary);font-size:.875rem}.mapboxgl-popup-content{padding:0;border-radius:8px;box-shadow:var(--shadow-md)}.mapboxgl-popup-close-button{font-size:1.25rem;padding:4px 8px}@media (max-width: 768px){#app{flex-direction:column}#map-container{order:0}#sidebar{width:100%;height:calc(100vh - var(--map-height, 40vh));border-right:none;border-bottom:1px solid var(--color-border);order:1;overflow-y:auto}#map-container{height:var(--map-height, 40vh)}#sidebar-content{flex:0 0 auto;overflow:visible}.hotel-card{padding:12px}.hotel-card-thumb{width:72px;height:72px}.detail-gallery-main img{max-height:240px}.photo-lightbox-close{top:-36px}#map-drawer-handle{display:block;position:sticky;top:8px;z-index:2}}body.map-drawer-list{--map-height: 40vh}body.map-drawer-expanded{--map-height: 10vh}body.map-drawer-detail{--map-height: 20vh}@media (max-width: 768px){body.map-drawer-detail .sidebar-header,body.map-drawer-detail-map .sidebar-header{display:none}}body.map-drawer-detail-map{--map-height: 40vh}
