:root{--cream: #f8f7f4;--sand: #e8dcc4;--sand-soft: #f0e9dc;--terracotta: #c4905a;--terracotta-deep: #a06f3e;--olive: #7c8b6a;--slate: #5d7a8c;--brown: #3d2817;--warm-grey: #9a8f7f;--line: #e8e3da;--shadow: 0 6px 20px rgba(61, 40, 23, .08);--radius: 10px;--font-ui: "Inter", system-ui, sans-serif;--font-display: "Fraunces", Georgia, serif;--c1: #c4905a;--c2: #7c8b6a;--c3: #5d7a8c;--c4: #a06f3e;--c5: #6b8e7c;--c6: #8b6f4a;--c7: #9c6f54;--c8: #7d6b8c;--c9: #b08260;--c10: #6e8276}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-ui);color:var(--brown);background:var(--cream);min-height:100vh;transition:padding-right .28s ease,padding-bottom .28s ease}body[data-panel-open=true]{padding-right:380px}@media(max-width:760px){body[data-panel-open=true]{padding-right:0}}.app-header{display:flex;justify-content:space-between;align-items:flex-end;padding:28px 36px 16px}.app-header h1{font-family:var(--font-display);font-weight:700;margin:0;font-size:32px;letter-spacing:-.02em}.app-header .subtitle{margin:4px 0 0;color:var(--warm-grey);font-size:13px}.trip-stats{display:flex;gap:20px;color:var(--warm-grey);font-size:12px;text-transform:uppercase;letter-spacing:1.2px}.trip-stats strong{color:var(--brown);font-size:14px;display:block;font-family:var(--font-display)}.timeline{margin:8px 36px 12px;padding:14px 16px 10px;background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.timeline-bar{position:relative;display:flex;height:56px;gap:2px;border-radius:6px;overflow:hidden}.timeline-dots{display:none;justify-content:space-between;align-items:center;gap:4px;padding:6px 4px 2px}.tl-dot{flex:0 0 auto;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-family:var(--font-display);font-weight:700;font-size:12px;text-shadow:0 1px 2px rgba(0,0,0,.35);border:2px solid #fff;box-shadow:0 1px 3px #00000040;padding:0;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.tl-dot[data-state=dimmed]{opacity:.4}.tl-dot[data-state=hovered]{transform:scale(1.15)}.tl-dot[data-state=selected]{outline:2px solid var(--brown);outline-offset:2px;transform:scale(1.1)}.tl-dot[data-transit=true]{width:22px;height:22px;background:var(--sand)!important;color:var(--brown);border:2px dashed var(--terracotta-deep);text-shadow:none;font-size:12px}.tl-segment{position:relative;display:flex;flex-direction:column;justify-content:center;padding:6px 8px;color:#fff;font-size:12px;cursor:pointer;transition:opacity .18s ease,transform .18s ease,box-shadow .18s ease;min-width:0}.tl-segment .tl-name{font-family:var(--font-display);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.35)}.tl-segment .tl-nights{font-size:10px;opacity:.95;letter-spacing:.5px;text-transform:uppercase;text-shadow:0 1px 2px rgba(0,0,0,.3)}.tl-segment[data-state=dimmed]{opacity:.35}.tl-segment[data-state=hovered]{transform:scaleY(1.06);box-shadow:0 4px 12px #00000040;z-index:2}.tl-segment[data-state=selected]{outline:2px solid var(--brown);outline-offset:1px;z-index:3}.tl-segment[data-transit=true]{background-image:repeating-linear-gradient(-45deg,rgba(255,255,255,.18) 0,rgba(255,255,255,.18) 3px,transparent 3px,transparent 7px);padding:6px 2px}.tl-segment[data-transit=true] .tl-name{display:none}.tl-segment[data-transit=true] .tl-nights{font-size:11px;text-align:center;letter-spacing:0}.timeline-axis{position:relative;height:18px;margin-top:4px;font-size:10px;color:var(--warm-grey)}.timeline-axis .tick{position:absolute;top:4px;transform:translate(-50%)}.timeline-axis .tick:before{content:"";display:block;height:4px;width:1px;background:var(--line);margin:0 auto 2px}.timeline-today{position:absolute;top:0;bottom:18px;width:2px;background:var(--terracotta-deep);pointer-events:none}@media(max-width:760px){.timeline{margin:8px 16px 12px;padding:10px 10px 6px}.timeline-bar,.timeline-axis,.timeline-today{display:none}.timeline-dots{display:flex}.app-header{flex-direction:column;align-items:stretch;gap:12px;padding:20px 20px 8px}.app-header h1{font-size:26px}.trip-stats{gap:14px;flex-wrap:wrap}}.map{margin:0 36px 36px;height:60vh;min-height:420px;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}@media(max-width:760px){.map{margin:0 16px 16px;height:50vh;min-height:320px}}.stay-marker{width:30px;height:30px;border-radius:50%;background:var(--marker-color, var(--terracotta));color:#fff;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:13px;text-shadow:0 1px 2px rgba(0,0,0,.45);border:2px solid #fff;box-shadow:0 2px 6px #00000059;transition:transform .18s ease,opacity .18s ease;cursor:pointer}.stay-marker[data-state=dimmed]{opacity:.4}.stay-marker[data-state=hovered]{transform:scale(1.25);box-shadow:0 0 0 6px #c4905a40,0 4px 10px #00000059}.stay-marker[data-state=selected]{outline:3px solid var(--brown);outline-offset:2px}.stay-marker[data-transit=true]{width:22px;height:22px;font-size:11px;background:var(--sand);color:var(--brown);border:2px dashed var(--terracotta-deep)}.leg-label{background:#fffffff2;border:1px solid var(--line);border-radius:6px;padding:4px 8px;font-size:11px;color:var(--brown);white-space:nowrap;box-shadow:0 2px 6px #0000001a}.map-leg-badge{display:none;position:absolute;top:12px;left:56px;z-index:600;background:#fffffff5;border:1px solid var(--line);border-radius:6px;padding:5px 10px;font-size:12px;color:var(--brown);font-variant-numeric:tabular-nums;box-shadow:0 2px 8px #3d281726;pointer-events:none;opacity:0;transform:translateY(-4px);transition:opacity .18s ease,transform .18s ease}.map-leg-badge[data-shown=true]{opacity:1;transform:translateY(0)}@media(max-width:760px){.map-leg-badge{display:block}.leaflet-tooltip.leg-label{display:none!important}}.detail-panel{position:fixed;top:0;right:0;bottom:0;width:380px;background:#fff;border-left:1px solid var(--line);box-shadow:-8px 0 24px #3d281714;transform:translate(110%);transition:transform .28s ease;padding:24px 24px 32px;overflow-y:auto;z-index:800}.detail-panel[data-open=true]{transform:translate(0)}@media(max-width:760px){.detail-panel{position:static;width:auto;height:auto;margin:0 16px 24px;padding:18px 18px 24px;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);transform:none;transition:none;display:none;overflow:visible}.detail-panel[data-open=true]{display:block}}.detail-panel header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.detail-panel h2{font-family:var(--font-display);font-size:22px;margin:0;font-weight:700}.detail-panel .panel-close{background:none;border:none;font-size:22px;cursor:pointer;color:var(--warm-grey);line-height:1}.detail-panel .kind-badge{display:inline-block;padding:2px 8px;background:var(--sand-soft);color:var(--brown);border-radius:999px;font-size:10px;letter-spacing:1px;text-transform:uppercase}.detail-panel .field{margin:14px 0}.detail-panel .field label{display:block;font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--warm-grey);margin-bottom:4px}.detail-panel input,.detail-panel textarea{width:100%;font-family:var(--font-ui);font-size:13px;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:var(--cream);color:var(--brown)}.detail-panel input:focus,.detail-panel textarea:focus{outline:2px solid var(--terracotta);outline-offset:-1px;background:#fff}.detail-panel textarea{min-height:80px;resize:vertical}.detail-panel .saved-tick{color:var(--olive);font-size:11px;margin-left:6px;opacity:0;transition:opacity .2s}.detail-panel .saved-tick[data-shown=true]{opacity:1}.detail-panel .field-error{color:#b3402a;font-size:11px;margin-top:4px}.detail-panel a.booking-link{display:inline-block;margin-top:8px;color:var(--terracotta-deep);font-size:12px;word-break:break-all}.detail-panel img.stay-image{display:block;width:100%;height:180px;object-fit:cover;border-radius:var(--radius);margin-bottom:14px;background:var(--sand-soft);border:1px solid var(--line)}.detail-panel img.stay-image[data-broken=true]{position:relative}.detail-panel img.stay-image[data-broken=true]:after{content:"Image failed to load";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--warm-grey);font-size:12px;background:var(--sand-soft)}.map-image-preview{position:absolute;top:12px;right:12px;width:400px;height:260px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px #3d28172e;padding:4px;pointer-events:none;z-index:600;opacity:0;transform:translateY(-4px);transition:opacity .18s ease,transform .18s ease}.map-image-preview[data-shown=true]{opacity:1;transform:translateY(0)}.map-image-preview img{display:block;width:100%;height:100%;object-fit:cover;border-radius:5px}@media(max-width:760px){.map-image-preview{width:200px;height:130px}}.route-picker{margin:18px 0 4px;padding-top:14px;border-top:1px solid var(--line)}.route-picker>label{display:block;font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--warm-grey);margin-bottom:8px}.route-picker .route-empty{font-size:11px;color:var(--warm-grey);margin:4px 0 0}.route-option{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;margin-bottom:6px;background:var(--cream);border:1px solid var(--line);border-radius:6px;font-family:var(--font-ui);font-size:13px;color:var(--brown);text-align:left;cursor:pointer;transition:border-color .15s,background .15s,transform .12s}.route-option:hover{border-color:var(--terracotta);background:#fff}.route-option:active{transform:scale(.99)}.route-option[data-selected=true]{border-color:var(--brown);background:#fff;box-shadow:0 0 0 1px var(--brown) inset;cursor:default}.route-option[data-selected=true]:hover{border-color:var(--brown)}.route-option-dot{width:10px;height:10px;border-radius:50%;background:#1a1a1a;flex:0 0 auto}.route-option[data-selected=true] .route-option-dot{background:var(--terracotta)}.route-option-meta{flex:1;font-variant-numeric:tabular-nums}.route-option-tag{font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--warm-grey)}.route-option[data-selected=true] .route-option-tag{color:var(--brown);font-weight:600}.route-option[data-error=true]{border-color:#b3402a}
