/* ============================================================
   UK TRIP PLANNER — styles
   โครง token / layout ยกมาจากไฟล์ต้นแบบ xxxx.html แล้วต่อยอด
   ============================================================ */

:root{
  --green:#173f2a; --green2:#245d3e; --cream:#f7f3e9; --paper:#fffdf8;
  --ink:#1e2922; --muted:#6d756f; --line:#dfe4dc; --gold:#d4a642;
  --shadow:0 10px 30px rgba(21,42,29,.10); --radius:18px;
  --topbar-h:109px;
}
*{box-sizing:border-box}
body{margin:0;background:#eef1eb;color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans Thai",sans-serif}
button{font:inherit}
a{color:inherit}

.app{min-height:100vh;display:grid;grid-template-columns:360px 1fr;grid-template-rows:auto auto 1fr}

/* ---------- topbar ---------- */
.topbar{grid-column:1/-1;background:var(--green);color:#fff;padding:16px 22px;display:flex;align-items:center;justify-content:space-between;gap:18px;position:sticky;top:0;z-index:1000}
.brand{display:flex;align-items:center;gap:12px}
.flag{font-size:29px}
.brand h1{font-size:18px;margin:0;font-weight:800;letter-spacing:.2px}
.brand small{opacity:.72}
.topbar-meta{font-size:11px;opacity:.75;text-align:right;line-height:1.6}

/* ---------- day tabs ---------- */
.day-tabs{display:flex;gap:8px;overflow-x:auto;padding:10px 12px;background:#f7f8f5;border-bottom:1px solid var(--line);grid-column:1/-1;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.day-tabs button{border:1px solid #d8ddd6;background:#fff;border-radius:999px;padding:8px 13px;cursor:pointer;white-space:nowrap;color:#425047;display:flex;flex-direction:column;align-items:center;line-height:1.25;transition:.15s}
.day-tabs button:hover{border-color:#b6c1b6}
.day-tabs button b{font-size:12px;font-weight:800}
.day-tabs button i{font-style:normal;font-size:9px;opacity:.65}
.day-tabs button.active{background:var(--green);border-color:var(--green);color:#fff;font-weight:700}
.day-tabs button.active i{opacity:.8}

/* ---------- sidebar ---------- */
.sidebar{background:var(--cream);overflow:auto;height:calc(100vh - var(--topbar-h));padding:18px 16px}
.content{position:relative;min-width:0;height:calc(100vh - var(--topbar-h))}
#map{height:100%;width:100%;background:#dfe5dd}

.panel{background:rgba(255,253,248,.96);border:1px solid rgba(205,213,204,.9);border-radius:var(--radius);box-shadow:var(--shadow)}

/* ---------- hero ---------- */
.hero{padding:18px;margin-bottom:14px;background:linear-gradient(135deg,#173f2a,#2e6848);color:#fff;position:relative;overflow:hidden}
.hero .eyebrow{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;opacity:.72}
.hero h2{margin:5px 0 3px;font-size:26px;line-height:1.2}
.hero p{margin:0;opacity:.8;font-size:13px;line-height:1.55}
.hero-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:11px}
.hero-meta span{font-size:10px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.18);padding:4px 9px;border-radius:99px}
.hero-highlight{margin-top:11px;font-size:11px;background:rgba(212,166,66,.22);border:1px solid rgba(212,166,66,.45);color:#ffe9b8;padding:7px 10px;border-radius:10px}
.hero-cover{width:100%;height:120px;object-fit:cover;border-radius:12px;margin-bottom:12px;display:block}

/* ---------- weather ---------- */
.weather{padding:14px;margin-bottom:14px}
.weather-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.weather h3{margin:0;font-size:14px}
.weather .date{font-size:11px;color:var(--muted);white-space:nowrap}
.weather-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:12px}
.weather-box{background:#f4f6f1;border-radius:12px;padding:10px;text-align:center}
.weather-box b{display:block;font-size:19px}
.weather-box span{font-size:10px;color:var(--muted)}
#weatherNote{font-size:10px;color:#747c76;margin-top:9px;line-height:1.5}

/* ---------- filters ---------- */
.filters{padding:12px 13px;margin-bottom:6px}
.filters-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}
.filters-head h3{margin:0;font-size:13px}
.filters-head button{border:0;background:none;color:var(--green2);font-size:11px;cursor:pointer;text-decoration:underline;padding:0}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{border:1px solid #d8ddd6;background:#fff;border-radius:999px;padding:5px 10px;font-size:11px;cursor:pointer;color:#4a554d;display:flex;align-items:center;gap:4px;transition:.15s}
.chip:hover{border-color:#aebaae}
.chip.on{color:#fff;font-weight:700}
.chip .n{opacity:.6;font-size:10px}

/* ---------- timeline ---------- */
.section-title{display:flex;justify-content:space-between;align-items:center;margin:18px 4px 10px;gap:8px}
.section-title h3{font-size:14px;margin:0}
.section-title span{font-size:11px;color:var(--muted);white-space:nowrap}
.timeline{display:flex;flex-direction:column;gap:10px;padding-bottom:24px}
.stop{display:grid;grid-template-columns:52px 1fr;gap:9px}
.time{font-size:11px;font-weight:800;color:var(--green2);padding-top:9px;text-align:right;line-height:1.45}
.time em{display:block;font-style:normal;font-weight:600;opacity:.55;font-size:10px}
.stop-card{background:var(--paper);border:1px solid var(--line);border-radius:14px;overflow:hidden;transition:.2s;cursor:pointer}
.stop-card:hover{transform:translateY(-1px);box-shadow:0 5px 16px rgba(20,40,25,.08)}
.stop-card.no-pin{cursor:default}
.stop-card.no-pin:hover{transform:none;box-shadow:none}
.stop-card.active{border-color:var(--green2);box-shadow:0 0 0 2px rgba(36,93,62,.18)}
.stop-card img{width:100%;height:92px;object-fit:cover;display:block;background:#e2e6df}
.stop-info{padding:9px 10px}
.stop-info strong{font-size:13px;display:block;margin-top:3px;line-height:1.35}
.stop-info p{font-size:11px;color:var(--muted);margin:5px 0 0;line-height:1.5}
.badge{display:inline-block;font-size:9px;padding:3px 7px;border-radius:99px;background:#e9f0e9;color:var(--green2);font-weight:800;letter-spacing:.3px}
.stars{color:var(--gold);font-size:10px;letter-spacing:-1px;margin-left:5px}
.tag{display:inline-block;font-size:9px;padding:3px 7px;border-radius:99px;font-weight:700;margin-left:4px}
.tag-optional{background:#eef2f7;color:#4a6180}
.tag-skip{background:#f7eeee;color:#9c4a45}
.tag-ticket{background:#fbf1dc;color:#8a6413}
.stop-card.is-skip{opacity:.72}
.stop-card.is-optional{border-style:dashed}
.photos{margin:7px 0 0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:4px}
.photos li{font-size:10px;background:#f2f0e6;border:1px solid #e6e2d3;color:#6b6350;border-radius:6px;padding:2px 6px}
.notes-toggle{margin-top:8px;background:none;border:0;padding:0;color:var(--green2);font-size:10.5px;cursor:pointer;text-decoration:underline}
.notes-body{margin:7px 0 0;padding:0 0 0 15px;font-size:10.5px;color:#5f6862;line-height:1.65}
.notes-body li{margin-bottom:3px}
.card-actions{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap}
.maps-link{font-size:10px;text-decoration:none;background:#eaf1ea;color:var(--green2);border:1px solid #d5e1d5;border-radius:8px;padding:4px 8px;font-weight:700}
.maps-link:hover{background:#dfe9df}
.empty{padding:26px 16px;text-align:center;color:var(--muted);font-size:12px;line-height:1.7}

/* ---------- overview ---------- */
.overview-day{display:grid;grid-template-columns:44px 1fr;gap:10px;background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:11px;cursor:pointer;transition:.18s;margin-bottom:9px;text-align:left;width:100%}
.overview-day:hover{transform:translateY(-1px);box-shadow:0 5px 16px rgba(20,40,25,.08)}
.overview-day .n{background:var(--green);color:#fff;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:800;font-size:14px;line-height:1.1}
.overview-day .n small{font-size:8px;font-weight:600;opacity:.75}
.overview-day h4{margin:0;font-size:13px}
.overview-day p{margin:3px 0 0;font-size:10.5px;color:var(--muted);line-height:1.5}
.overview-day .meta{margin-top:5px;font-size:9.5px;color:#7d857e}
.info-panel{padding:14px;margin-bottom:12px}
.info-panel h3{margin:0 0 9px;font-size:13px;display:flex;align-items:center;gap:7px}
.info-panel ul{margin:0;padding-left:17px;font-size:11px;line-height:1.75;color:#525b54}
.info-panel li{margin-bottom:2px}

/* ---------- map overlay ---------- */
.map-overlay{position:absolute;top:16px;right:16px;width:min(390px,calc(100% - 32px));z-index:500}
.map-card{padding:14px}
.map-card h3{margin:0 0 4px;font-size:15px}
.map-card p{margin:0;font-size:11px;color:var(--muted);line-height:1.5}
.route-summary{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.metric{background:#f5f6f2;border-radius:11px;padding:9px}
.metric b{font-size:15px}
.metric span{display:block;font-size:9px;color:var(--muted)}
.legend{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:10px;color:#59625c}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}
.green{background:#24714b}.gold{background:#d4a642}
.custom-pin{width:30px;height:30px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:var(--green);border:3px solid #fff;box-shadow:0 3px 10px #0003;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800}
.custom-pin span{transform:rotate(45deg);font-size:11px}
.popup h4{margin:0 0 4px;font-size:13px}
.popup img{width:180px;height:90px;object-fit:cover;border-radius:8px;margin-top:6px}
.popup p{font-size:11px;margin:4px 0;color:#59625c}
.popup a{font-size:11px;color:var(--green2);font-weight:700}
.leaflet-control-attribution{font-size:8px}

/* ---------- loading / error ---------- */
.state{position:fixed;inset:0;z-index:3000;background:#eef1eb;display:flex;align-items:center;justify-content:center;padding:24px}
.state[hidden]{display:none}
.state-box{max-width:460px;text-align:center;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:30px 26px}
.state-box h2{margin:14px 0 8px;font-size:18px}
.state-box p{margin:0;font-size:12.5px;color:var(--muted);line-height:1.75}
.state-box code{background:#f0f2ec;border-radius:5px;padding:1px 5px;font-size:11.5px}
.spinner{width:36px;height:36px;border:3px solid #dfe4dc;border-top-color:var(--green);border-radius:50%;margin:0 auto;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.retry{margin-top:16px;background:var(--green);color:#fff;border:0;border-radius:999px;padding:9px 20px;cursor:pointer;font-weight:700;font-size:13px}
.retry:hover{background:var(--green2)}
.err-detail{margin-top:12px;font-size:11px;color:#9c4a45;background:#fbf0ef;border:1px solid #f0dcda;border-radius:9px;padding:8px 10px;word-break:break-word}
.skeleton{background:linear-gradient(90deg,#e9ece6 25%,#f2f4ef 37%,#e9ece6 63%);background-size:400% 100%;animation:sk 1.3s ease infinite;border-radius:14px}
@keyframes sk{0%{background-position:100% 50%}100%{background-position:0 50%}}
.sk-row{height:96px;margin-bottom:10px}

/* ---------- mobile ---------- */
.mobile-toggle{display:none;grid-column:1/-1;gap:6px;padding:8px 12px;background:#f7f8f5;border-bottom:1px solid var(--line)}
.mobile-toggle button{flex:1;border:1px solid #d8ddd6;background:#fff;border-radius:999px;padding:8px;cursor:pointer;color:#425047;font-size:12px}
.mobile-toggle button.active{background:var(--green);border-color:var(--green);color:#fff;font-weight:700}

@media(max-width:900px){
  .app{display:block}
  .topbar{position:relative}
  .day-tabs{position:sticky;top:0;z-index:900}
  .mobile-toggle{display:flex;position:sticky;top:53px;z-index:899}
  .sidebar{height:auto;padding:12px}
  .content{height:calc(100vh - 200px);min-height:420px}
  .map-overlay{top:10px;right:10px}
  body.view-map .sidebar{display:none}
  body:not(.view-map) .content{display:none}
}
@media(max-width:600px){
  .brand small{display:none}
  .brand h1{font-size:15px}
  .topbar{padding:13px 15px}
  .topbar-meta{display:none}          /* ข้อมูลชุดนี้ซ้ำกับ hero ในหน้าภาพรวมอยู่แล้ว */
  .map-overlay{width:calc(100% - 20px)}
  .map-card{padding:11px}
  .stop-card img{height:82px}
  .hero h2{font-size:21px}
}
