{"id":8938,"date":"2026-10-03T16:35:38","date_gmt":"2026-10-03T09:35:38","guid":{"rendered":"https:\/\/nextstephuahin.com\/?page_id=8938"},"modified":"2026-10-08T23:01:26","modified_gmt":"2026-10-08T16:01:26","slug":"prognoz-pogody-v-khuakhine","status":"publish","type":"page","link":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/","title":{"rendered":"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435"},"content":{"rendered":"<div class=\"hhsg hhsg-weather-page\"><p class=\"hhsg-lead\">\u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0434\u0435\u043d\u044c \u043d\u0430 \u043f\u043b\u044f\u0436\u0435, \u0438\u0433\u0440\u0443 \u0432 \u0433\u043e\u043b\u044c\u0444 \u0438\u043b\u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043d\u0438\u0435? \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043e\u0431\u0437\u043e\u0440\u0430, \u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n\n<!-- Weather guide share button -->\n<div class=\"nshh-weather\" aria-label=\"Hua Hin weather forecast\">\n  <div class=\"nshh-weather-hero\">\n    <span class=\"nshh-weather-kicker\">WeatherNext forecast<\/span>\n    <h2>Hua Hin weather<\/h2>\n    <p>Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand<\/p>\n    <h3>Next 24 hours<\/h3>\n    <h3>7-day forecast<\/h3>\n    <p>Google WeatherNext guidance for Hua Hin. Check the Thai Meteorological Department for official warnings.<\/p>\n  <\/div>\n<\/div>\n<script data-no-optimize=\"1\">\nwindow.nshhWorkerForecast = {\"location\":\"Hua Hin, Thailand\",\"latitude\":12.5684,\"longitude\":99.9577,\"generatedAt\":\"2026-10-09T14:35:25.439Z\",\"source\":\"Open-Meteo fallback\",\"sourceInitTime\":\"2026-10-09T14:35:25.439Z\",\"latestAvailableInitTime\":\"2026-10-09T14:35:25.439Z\",\"current\":{\"time\":1791558000000,\"humidity\":88,\"dewPoint\":24.7},\"rows\":[{\"time\":1791504000000,\"temp\":27.1,\"low\":24.3,\"high\":31.8,\"wind\":5.4,\"rain\":0},{\"time\":1791514800000,\"temp\":29.5,\"low\":24.3,\"high\":31.8,\"wind\":8.1,\"rain\":0.2},{\"time\":1791525600000,\"temp\":31.8,\"low\":24.3,\"high\":31.8,\"wind\":11.9,\"rain\":0},{\"time\":1791536400000,\"temp\":31.1,\"low\":24.3,\"high\":31.8,\"wind\":13.4,\"rain\":0},{\"time\":1791547200000,\"temp\":28.7,\"low\":24.3,\"high\":31.8,\"wind\":3.4,\"rain\":0},{\"time\":1791558000000,\"temp\":26.9,\"low\":24.3,\"high\":31.8,\"wind\":5.8,\"rain\":0},{\"time\":1791568800000,\"temp\":26.4,\"low\":24.3,\"high\":31.8,\"wind\":5.3,\"rain\":0},{\"time\":1791579600000,\"temp\":24.7,\"low\":24.3,\"high\":31.8,\"wind\":12.3,\"rain\":0.1},{\"time\":1791590400000,\"temp\":24.5,\"low\":23.7,\"high\":29.5,\"wind\":8.8,\"rain\":0.7},{\"time\":1791601200000,\"temp\":28.5,\"low\":23.7,\"high\":29.5,\"wind\":15.9,\"rain\":0.3},{\"time\":1791612000000,\"temp\":29.5,\"low\":23.7,\"high\":29.5,\"wind\":15.2,\"rain\":0.2},{\"time\":1791622800000,\"temp\":28.7,\"low\":23.7,\"high\":29.5,\"wind\":12.9,\"rain\":0.8},{\"time\":1791633600000,\"temp\":26.1,\"low\":23.7,\"high\":29.5,\"wind\":3.9,\"rain\":0.4},{\"time\":1791644400000,\"temp\":24.2,\"low\":23.7,\"high\":29.5,\"wind\":13.9,\"rain\":1.4},{\"time\":1791655200000,\"temp\":24,\"low\":23.7,\"high\":29.5,\"wind\":12.4,\"rain\":0.1},{\"time\":1791666000000,\"temp\":24.1,\"low\":23.7,\"high\":29.5,\"wind\":10.5,\"rain\":0.1},{\"time\":1791676800000,\"temp\":24,\"low\":23.5,\"high\":28.2,\"wind\":8.7,\"rain\":0.4},{\"time\":1791687600000,\"temp\":26,\"low\":23.5,\"high\":28.2,\"wind\":6.9,\"rain\":0.9},{\"time\":1791698400000,\"temp\":27.7,\"low\":23.5,\"high\":28.2,\"wind\":7.7,\"rain\":0.3},{\"time\":1791709200000,\"temp\":28.1,\"low\":23.5,\"high\":28.2,\"wind\":8.1,\"rain\":0.2},{\"time\":1791720000000,\"temp\":26.5,\"low\":23.5,\"high\":28.2,\"wind\":3.5,\"rain\":0},{\"time\":1791730800000,\"temp\":26.1,\"low\":23.5,\"high\":28.2,\"wind\":9,\"rain\":0},{\"time\":1791741600000,\"temp\":25.2,\"low\":23.5,\"high\":28.2,\"wind\":10.7,\"rain\":0.6},{\"time\":1791752400000,\"temp\":23.5,\"low\":23.5,\"high\":28.2,\"wind\":14.2,\"rain\":1},{\"time\":1791763200000,\"temp\":24,\"low\":23.6,\"high\":29.1,\"wind\":12.7,\"rain\":0.9},{\"time\":1791774000000,\"temp\":26,\"low\":23.6,\"high\":29.1,\"wind\":7.7,\"rain\":1.4},{\"time\":1791784800000,\"temp\":28.6,\"low\":23.6,\"high\":29.1,\"wind\":14.4,\"rain\":0.2},{\"time\":1791795600000,\"temp\":28.9,\"low\":23.6,\"high\":29.1,\"wind\":9.9,\"rain\":0.3},{\"time\":1791806400000,\"temp\":27.3,\"low\":23.6,\"high\":29.1,\"wind\":7.2,\"rain\":0},{\"time\":1791817200000,\"temp\":25.4,\"low\":23.6,\"high\":29.1,\"wind\":8.1,\"rain\":0.3},{\"time\":1791828000000,\"temp\":24.9,\"low\":23.6,\"high\":29.1,\"wind\":3.8,\"rain\":0.2},{\"time\":1791838800000,\"temp\":24.3,\"low\":23.6,\"high\":29.1,\"wind\":12.8,\"rain\":1.9},{\"time\":1791849600000,\"temp\":23.9,\"low\":23.8,\"high\":29.3,\"wind\":10.8,\"rain\":0.1},{\"time\":1791860400000,\"temp\":27.2,\"low\":23.8,\"high\":29.3,\"wind\":11.6,\"rain\":1.2},{\"time\":1791871200000,\"temp\":29,\"low\":23.8,\"high\":29.3,\"wind\":15.7,\"rain\":0.2},{\"time\":1791882000000,\"temp\":29.2,\"low\":23.8,\"high\":29.3,\"wind\":10.1,\"rain\":0},{\"time\":1791892800000,\"temp\":27.2,\"low\":23.8,\"high\":29.3,\"wind\":3.4,\"rain\":0},{\"time\":1791903600000,\"temp\":25.4,\"low\":23.8,\"high\":29.3,\"wind\":10.5,\"rain\":1},{\"time\":1791914400000,\"temp\":24.5,\"low\":23.8,\"high\":29.3,\"wind\":10.9,\"rain\":0.2},{\"time\":1791925200000,\"temp\":24.1,\"low\":23.8,\"high\":29.3,\"wind\":11.8,\"rain\":0.3},{\"time\":1791936000000,\"temp\":24,\"low\":23.5,\"high\":29.3,\"wind\":12.4,\"rain\":1.6},{\"time\":1791946800000,\"temp\":27.1,\"low\":23.5,\"high\":29.3,\"wind\":15,\"rain\":0.3},{\"time\":1791957600000,\"temp\":29.2,\"low\":23.5,\"high\":29.3,\"wind\":15.8,\"rain\":0.1},{\"time\":1791968400000,\"temp\":28.8,\"low\":23.5,\"high\":29.3,\"wind\":9.3,\"rain\":0},{\"time\":1791979200000,\"temp\":27.1,\"low\":23.5,\"high\":29.3,\"wind\":1.5,\"rain\":0},{\"time\":1791990000000,\"temp\":25.7,\"low\":23.5,\"high\":29.3,\"wind\":4.9,\"rain\":0},{\"time\":1792000800000,\"temp\":25.2,\"low\":23.5,\"high\":29.3,\"wind\":8,\"rain\":0},{\"time\":1792011600000,\"temp\":23.9,\"low\":23.5,\"high\":29.3,\"wind\":9.3,\"rain\":0.3},{\"time\":1792022400000,\"temp\":23.8,\"low\":23.8,\"high\":29.9,\"wind\":9.7,\"rain\":1.2},{\"time\":1792033200000,\"temp\":28,\"low\":23.8,\"high\":29.9,\"wind\":9.9,\"rain\":0.1},{\"time\":1792044000000,\"temp\":29.6,\"low\":23.8,\"high\":29.9,\"wind\":12.4,\"rain\":0.2},{\"time\":1792054800000,\"temp\":29,\"low\":23.8,\"high\":29.9,\"wind\":7,\"rain\":0},{\"time\":1792065600000,\"temp\":27.2,\"low\":23.8,\"high\":29.9,\"wind\":2.8,\"rain\":0},{\"time\":1792076400000,\"temp\":26.3,\"low\":23.8,\"high\":29.9,\"wind\":1.5,\"rain\":0},{\"time\":1792087200000,\"temp\":25.6,\"low\":23.8,\"high\":29.9,\"wind\":6.3,\"rain\":0},{\"time\":1792098000000,\"temp\":24.7,\"low\":23.8,\"high\":29.9,\"wind\":7.5,\"rain\":0.5}]};\n<\/script>\n<script data-no-optimize=\"1\">\n(() => {\n  const root = document.querySelector('.nshh-weather');\n  if (!root) return;\n\n  \/\/ The captured site shell places the dark introductory lead before the\n  \/\/ dashboard. Keep it, but place it after the weather view instead.\n  const leadCard = document.querySelector('.hhsg-lead');\n  if (leadCard) root.after(leadCard);\n\n  const style = document.createElement('style');\n  style.textContent = `\n    .nshh-weather { max-width: 1180px; margin: 0 auto; color: #17213b; }\n    .wx-dashboard { --wx-navy:#17213b; --wx-blue:#1677c8; --wx-sky:#dff3ff; --wx-mint:#dcf7ee; --wx-line:#d9e6ef; font-family:\"Plus Jakarta Sans\",sans-serif; }\n    .wx-hero { position:relative; overflow:hidden; border-radius:28px; padding:clamp(24px,4vw,48px); color:#fff; background:radial-gradient(circle at 88% 12%,rgba(255,255,255,.26),transparent 24%),linear-gradient(135deg,#14204b,#1677c8 62%,#2bb7b1); box-shadow:0 18px 45px rgba(20,47,91,.22); }\n    .wx-hero:after { content:\"\"; position:absolute; width:220px; height:220px; right:-70px; bottom:-120px; border:28px solid rgba(255,255,255,.13); border-radius:50%; }\n    .wx-eyebrow { text-transform:uppercase; letter-spacing:.13em; font-size:.72rem; font-weight:800; opacity:.82; }\n    .wx-eyebrow { display:inline-flex; align-items:center; gap:8px; }\n    .wx-google-logo { width:17px; height:17px; display:block; flex:none; }\n    .wx-hero h2 { margin:.35rem 0 .2rem; color:#fff; font-size:clamp(2rem,5vw,3.75rem); line-height:1.05; }\n    .wx-title-row { display:flex; align-items:baseline; justify-content:space-between; gap:24px; }\n    .wx-title-date { flex:none; color:#52738e; font-size:clamp(.95rem,1.6vw,1.25rem); font-weight:700; letter-spacing:-.02em; white-space:nowrap; }\n    .wx-hero p { margin:0; opacity:.88; }\n    .wx-hero-grid { position:relative; z-index:1; display:grid; grid-template-columns:1.25fr .75fr; gap:22px; align-items:end; }\n    .wx-now { display:flex; align-items:end; gap:18px; margin-top:24px; }\n    .wx-temp { font-size:clamp(6.5rem,15vw,10rem); font-weight:800; line-height:.78; letter-spacing:-.1em; }\n    .wx-unit { font-size:2.2rem; opacity:.8; margin-bottom:.8rem; font-weight:700; }\n    .wx-condition { margin-bottom:.55rem; font-size:1.05rem; }\n    .wx-panel { position:relative; z-index:1; display:grid; grid-template-columns:1fr 1fr; gap:10px; }\n    .wx-stat { padding:14px; border:1px solid rgba(255,255,255,.25); border-radius:16px; background:rgba(255,255,255,.13); backdrop-filter:blur(7px); }\n    .wx-stat small,.wx-label { display:block; font-size:.72rem; text-transform:uppercase; letter-spacing:.08em; opacity:.78; font-weight:800; }\n    .wx-stat strong { display:block; margin-top:5px; font-size:1.08rem; }\n    .wx-section { margin-top:30px; }\n    .wx-section h3 { margin:0 0 12px; color:var(--wx-navy); font-size:1.35rem; }\n    .wx-muted { color:#63728a; font-size:.92rem; }\n    .wx-scroll { display:flex; gap:10px; overflow-x:auto; padding:2px 2px 13px; scroll-snap-type:x mandatory; }\n    .wx-hour { flex:0 0 88px; scroll-snap-align:start; text-align:center; padding:14px 8px; border:1px solid var(--wx-line); border-radius:16px; background:#fff; box-shadow:0 6px 18px rgba(23,33,59,.06); }\n    .wx-hour strong { display:block; margin:8px 0 4px; font-size:1.8rem; font-weight:800; letter-spacing:-.05em; }\n    .wx-hour small { display:block; font-size:1.02rem; font-weight:600; color:#5a718a; }\n    .wx-icon { display:block; font-size:2.15rem; line-height:1.1; }\n    .wx-days { display:grid; grid-template-columns:repeat(7,1fr); gap:10px; }\n    .wx-day { min-width:0; padding:16px 11px; border:1px solid var(--wx-line); border-radius:18px; background:linear-gradient(180deg,#fff,#f5fbff); text-align:center; }\n    .wx-day strong { display:block; }\n    .wx-day .wx-icon { margin:10px 0; font-size:2.35rem; }\n    .wx-range { height:6px; margin:13px 0 9px; border-radius:99px; background:linear-gradient(90deg,#55b8e8,#ffc763,#ef8354); }\n    .wx-day small { color:#61718a; }\n    .wx-day small { font-size:1.02rem; font-weight:600; }\n    .wx-insights { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; }\n    .wx-insight { padding:18px; border-radius:18px; background:#fff; border:1px solid var(--wx-line); box-shadow:0 7px 20px rgba(23,33,59,.05); }\n    .wx-insight strong { display:block; margin-top:7px; font-size:1.12rem; }\n    .wx-advice { display:grid; grid-template-columns:1fr 1fr; gap:14px; }\n    .wx-advice article { padding:20px; border-radius:18px; background:linear-gradient(135deg,var(--wx-mint),#fff); border:1px solid #bde9dc; }\n    .wx-advice h4 { margin:0 0 7px; }\n    .wx-note { margin-top:18px; padding:14px 16px; border-left:4px solid var(--wx-blue); background:var(--wx-sky); border-radius:10px; color:#30435d; font-size:.9rem; }\n    .wx-radar { display:grid; grid-template-columns:1fr .8fr; gap:18px; align-items:center; padding:18px; border:1px solid var(--wx-line); border-radius:20px; background:#fff; box-shadow:0 7px 20px rgba(23,33,59,.05); }\n    .wx-radar img { display:block; width:100%; max-height:380px; object-fit:contain; border-radius:14px; background:#10213e; }\n    .wx-radar h4 { margin:0 0 8px; font-size:1.2rem; }\n    .wx-radar a { display:inline-block; margin-top:12px; padding:10px 14px; border-radius:999px; background:var(--wx-navy); color:#fff; text-decoration:none; font-weight:700; }\n    @media (max-width:800px){ .wx-radar{grid-template-columns:1fr} }\n    @media (max-width:800px){ .wx-hero-grid,.wx-advice{grid-template-columns:1fr}.wx-days{grid-template-columns:repeat(7,minmax(106px,1fr));overflow-x:auto;display:flex;padding-bottom:10px}.wx-day{flex:0 0 106px}.wx-insights{grid-template-columns:1fr 1fr} }\n    @media (max-width:480px){ .wx-hero{border-radius:20px;padding:24px 18px}.wx-insights{grid-template-columns:1fr 1fr}.wx-stat{padding:11px}.wx-temp{font-size:4.7rem} }\n    @media (prefers-reduced-motion:reduce){ *{scroll-behavior:auto!important} }\n    \/* Weather-channel-inspired refinement: calm white cards, clear hierarchy and compact forecast rows. *\/\n    .wx-dashboard { max-width:1060px; margin:0 auto; padding:0 0 28px; color:#253247; }\n    .wx-hero { border-radius:12px; padding:28px 30px; color:#253247; background:#fff; border:1px solid #dfe6ec; box-shadow:0 2px 8px rgba(31,50,73,.08); }\n    .wx-hero:after { display:none; }\n    .wx-eyebrow,.wx-label,.wx-stat small { color:#65758a; opacity:1; letter-spacing:.1em; }\n    .wx-hero h2 { color:#172b4d; font-size:clamp(2rem,4vw,3rem); }\n    .wx-hero p { color:#607086; opacity:1; }\n    .wx-now { margin-top:28px; }\n    .wx-temp { color:#172b4d; font-size:clamp(4.5rem,9vw,6.5rem); }\n    .wx-unit,.wx-condition { color:#51647a; }\n    .wx-panel { gap:0; border-top:1px solid #e5ebf0; border-left:1px solid #e5ebf0; }\n    .wx-stat { border:0; border-right:1px solid #e5ebf0; border-bottom:1px solid #e5ebf0; border-radius:0; background:#fff; backdrop-filter:none; }\n    .wx-stat strong { color:#172b4d; }\n    .wx-section { margin-top:26px; }\n    .wx-section h3 { font-size:1.2rem; }\n    .wx-scroll { gap:0; padding:0; border:1px solid #dfe6ec; border-radius:12px; background:#fff; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-hour { flex:0 0 86px; border:0; border-right:1px solid #edf1f4; border-radius:0; box-shadow:none; background:#fff; }\n    .wx-hour:first-child { border-radius:12px 0 0 12px; }\n    .wx-hour:last-child { border-right:0; border-radius:0 12px 12px 0; }\n    .wx-days { display:block; border:1px solid #dfe6ec; border-radius:12px; overflow:hidden; background:#fff; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-day { display:grid; grid-template-columns:74px 42px 105px 1fr 90px; gap:12px; align-items:center; min-height:66px; padding:10px 16px; border:0; border-bottom:1px solid #edf1f4; border-radius:0; background:#fff; text-align:left; }\n    .wx-day:last-child { border-bottom:0; }\n    .wx-day .wx-icon { margin:0; }\n    .wx-range { grid-column:4; grid-row:1; margin:0; max-width:240px; }\n    .wx-day small { grid-column:5; grid-row:1; text-align:right; }\n    .wx-insight { border-radius:12px; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-radar { border-radius:12px; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-radar a { background:#1677c8; }\n    .wx-section[aria-labelledby=\"wx-details\"], .wx-advice { display:none !important; }\n    .wx-current-details { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; width:100%; margin-top:12px; color:#52738e; font-size:.82rem; font-weight:700; }\n    .wx-current-details > div { min-width:0; display:flex; flex-direction:column; gap:4px; padding:12px 14px; border:1px solid rgba(82,115,142,.22); border-radius:14px; background:rgba(255,255,255,.58); box-sizing:border-box; }\n    .wx-current-details span { display:block; text-transform:uppercase; letter-spacing:.06em; font-size:.68rem; line-height:1.2; font-weight:800; }\n    .wx-current-details strong { color:#173c66; font-size:1.15rem; line-height:1.2; overflow-wrap:anywhere; }\n    @media (max-width:480px){ .wx-current-details { grid-template-columns:1fr; } }\n    @media (max-width:800px){ .wx-day{grid-template-columns:62px 34px 78px 1fr 72px;gap:8px;padding:10px}.wx-range{max-width:130px}.wx-day small{font-size:.72rem}.wx-dashboard{padding-left:12px;padding-right:12px} }\n    @media (max-width:480px){ .wx-hero{padding:22px 18px}.wx-day{grid-template-columns:54px 30px 72px 1fr 60px;font-size:.86rem}.wx-range{max-width:70px}.wx-day small{font-size:.68rem} }\n    .wx-dashboard, .wx-dashboard * { font-family:\"Plus Jakarta Sans\",\"Avenir Next\",system-ui,sans-serif !important; font-synthesis:none; }\n    .wx-dashboard h2,.wx-dashboard h3,.wx-dashboard h4,.wx-dashboard strong { letter-spacing:-.025em; }\n    .wx-strip-wrap { position:relative; display:flex; align-items:stretch; }\n    .wx-strip-wrap .wx-scroll { flex:1; margin:0 48px; }\n    .wx-arrow { position:absolute; z-index:2; top:50%; transform:translateY(-50%); width:42px; height:68px; border:1px solid #cbd8e3; border-radius:12px; background:#fff; color:#1677c8; box-shadow:0 3px 10px rgba(31,50,73,.14); font:800 2rem\/1 \"Plus Jakarta Sans\",sans-serif; cursor:pointer; }\n    .wx-arrow:hover,.wx-arrow:focus-visible { background:#eaf6ff; border-color:#1677c8; outline:3px solid rgba(22,119,200,.2); }\n    .wx-arrow.left { left:0; }.wx-arrow.right { right:0; }\n    .wx-forward-only .wx-scroll { margin-left:0; }\n    .wx-controls { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-top:18px; padding-top:14px; border-top:1px solid #e5ebf0; }\n    .wx-time-meta { color:#64748b; font-size:.86rem; line-height:1.6; }\n    .wx-time-meta strong { color:#253247; }\n    .wx-unit-toggle { display:inline-flex; align-items:center; gap:4px; padding:4px; border:1px solid #cbd8e3; border-radius:999px; background:#f7fafc; }\n    .wx-unit-toggle button { min-width:42px; border:0; border-radius:999px; padding:7px 10px; background:transparent; color:#5c6c80; font:700 .82rem \"Plus Jakarta Sans\",sans-serif; cursor:pointer; }\n    .wx-temp,.wx-hour strong,.wx-day-temp,.wx-stat strong { font-variant-numeric:tabular-nums; }\n    .wx-day-temp { font-size:1.55rem; font-weight:800; letter-spacing:-.045em; color:#172b4d; }\n    .wx-unit-toggle button.active { background:#1677c8; color:#fff; box-shadow:0 2px 5px rgba(22,119,200,.25); }\n    @media (max-width:480px){ .wx-temp{font-size:clamp(5.8rem,25vw,8rem)}.wx-hour strong{font-size:1.65rem}.wx-hour .wx-icon{font-size:2rem}.wx-day .wx-icon{font-size:2.1rem}.wx-day-temp{font-size:1.35rem} }\n    @media (max-width:600px){ .wx-strip-wrap .wx-scroll{margin:0 40px}.wx-arrow{width:36px;height:60px}.wx-controls{align-items:flex-start;flex-direction:column}.wx-unit-toggle{align-self:flex-end} }\n    \/* Light atmospheric reference treatment: airy sky, frosted cards, high-contrast figures. *\/\n    .nshh-weather { max-width:none; padding:0 16px 64px; position:relative; overflow:hidden; background:linear-gradient(160deg,#dff4ff 0%,#f7fbff 42%,#fff7e9 100%); }\n    .nshh-weather:before,.nshh-weather:after { content:\"\"; position:absolute; border-radius:50%; filter:blur(3px); pointer-events:none; }\n    .nshh-weather:before { width:48vw; height:28vw; top:-8vw; left:-12vw; background:rgba(255,255,255,.78); box-shadow:34vw 12vw 0 5vw rgba(255,255,255,.38),72vw 4vw 0 2vw rgba(255,255,255,.55); }\n    .nshh-weather:after { width:34vw; height:34vw; right:-14vw; bottom:8vw; background:rgba(255,218,151,.22); }\n    .wx-dashboard { position:relative; z-index:1; max-width:1120px; color:#142c4c; }\n    .wx-hero { min-height:380px; padding:clamp(30px,6vw,72px) clamp(24px,6vw,74px); border:1px solid rgba(255,255,255,.76); border-radius:36px; color:#17365a; background:linear-gradient(135deg,rgba(255,255,255,.78),rgba(230,246,255,.58)); box-shadow:0 22px 70px rgba(48,104,139,.16); backdrop-filter:blur(22px); }\n    .wx-hero h2 { color:#15385c; font-size:clamp(2.8rem,8vw,6rem); font-weight:500; letter-spacing:-.075em; }\n    .wx-hero p,.wx-unit,.wx-condition { color:#4d6a85; }\n    .wx-eyebrow,.wx-label,.wx-stat small { color:#52738e; }\n    .wx-now { align-items:center; gap:22px; }\n    .wx-temp { color:#14375c; font-size:clamp(7rem,17vw,12rem); font-weight:400; letter-spacing:-.12em; line-height:.72; }\n    .wx-unit { align-self:flex-start; margin-top:0; margin-bottom:0; line-height:1; font-size:clamp(2.6rem,5vw,4.2rem); font-weight:700; color:#55748f; }\n    .wx-condition { font-size:1.1rem; }\n    .wx-aqi-inline { margin-top:14px; padding-top:12px; border-top:1px solid rgba(82,115,142,.24); color:#52738e; font-size:.88rem; }\n    .wx-aqi-inline span { display:block; text-transform:uppercase; letter-spacing:.08em; font-size:.7rem; font-weight:800; }\n    .wx-aqi-inline { width:100%; max-width:100%; box-sizing:border-box; }\n    .wx-aqi-inline strong { display:block; width:100%; max-width:100%; box-sizing:border-box; margin-top:3px; color:#173a5e; font-size:1rem !important; line-height:1.5 !important; font-weight:700; overflow-wrap:anywhere; word-break:normal; }\n    .wx-aqi-inline strong small { font-size:.86rem !important; line-height:1.45 !important; }\n    .wx-aqi-inline strong.wx-aqi-good,\n    .wx-aqi-inline strong.wx-aqi-moderate,\n    .wx-aqi-inline strong.wx-aqi-unhealthy { position:relative; padding:7px 10px 8px 29px; border-radius:12px; }\n    .wx-aqi-inline strong.wx-aqi-good { background:#e3f6ea; color:#176b3a; }\n    .wx-aqi-inline strong.wx-aqi-moderate { background:#fff4cf; color:#775700; }\n    .wx-aqi-inline strong.wx-aqi-unhealthy { background:#fde0e0; color:#a52c2c; }\n    .wx-aqi-inline strong.wx-aqi-good::before,\n    .wx-aqi-inline strong.wx-aqi-moderate::before,\n    .wx-aqi-inline strong.wx-aqi-unhealthy::before { content:\"\"; position:absolute; left:11px; top:13px; width:10px; height:10px; border-radius:50%; }\n    .wx-aqi-inline strong.wx-aqi-good::before { background:#2ca66f; }\n    .wx-aqi-inline strong.wx-aqi-moderate::before { background:#e0a900; }\n    .wx-aqi-inline strong.wx-aqi-unhealthy::before { background:#d94b4b; }\n    .wx-aqi-inline strong small { display:block; margin-top:2px; color:inherit; font-size:.82rem; font-weight:600; }\n    .wx-aqi-inline strong.wx-aqi-value { display:block; width:100%; box-sizing:border-box; margin-top:6px; padding:14px 16px; border-radius:16px; font-size:1rem !important; line-height:1.35 !important; font-weight:700; overflow-wrap:anywhere; white-space:normal; }\n    .wx-aqi-inline strong.wx-aqi-value::before { display:none; }\n    .wx-aqi-inline .wx-aqi-primary { display:grid; grid-template-columns:auto 1fr; column-gap:10px; align-items:baseline; }\n    .wx-aqi-inline .wx-aqi-primary span,\n    .wx-aqi-inline .wx-aqi-supporting span { display:block; text-transform:none; letter-spacing:0; font-size:.76rem !important; line-height:1.2 !important; font-weight:700; opacity:.8; }\n    .wx-aqi-inline .wx-aqi-primary strong { grid-column:1; grid-row:1 \/ span 2; margin:0; padding:0; background:none; color:inherit; font-size:2rem !important; line-height:1 !important; }\n    .wx-aqi-inline .wx-aqi-primary em { grid-column:2; font-style:normal; font-size:.88rem; line-height:1.2; font-weight:700; }\n    .wx-aqi-inline .wx-aqi-supporting { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin-top:12px; padding-top:10px; border-top:1px solid rgba(165,44,44,.18); }\n    .wx-aqi-inline .wx-aqi-supporting > div { min-width:0; }\n    .wx-aqi-inline .wx-aqi-supporting strong { display:block; margin:3px 0 0; padding:0; background:none; color:inherit; font-size:.95rem !important; line-height:1.25 !important; overflow-wrap:anywhere; }\n    .wx-aqi-inline .wx-aqi-supporting small { display:inline; margin:0; font-size:.7rem !important; line-height:1.2 !important; font-weight:600; }\n    @media(max-width:600px){\n      .wx-aqi-inline strong.wx-aqi-value { padding:12px 13px; }\n      .wx-aqi-inline .wx-aqi-primary strong { font-size:1.75rem !important; }\n      .wx-aqi-inline .wx-aqi-supporting { grid-template-columns:repeat(2,minmax(0,1fr)); }\n    }\n    .wx-panel { gap:12px; }\n    .wx-stat { border:1px solid rgba(255,255,255,.72); border-radius:22px; background:rgba(255,255,255,.47); box-shadow:0 8px 28px rgba(53,109,145,.08); }\n    .wx-stat strong { color:#173a5e; font-size:1.3rem; }\n    .wx-daylight-line { display:block; white-space:nowrap; }\n    .wx-daylight-line + .wx-daylight-line { margin-top:5px; }\n    .wx-daylight-icon { display:inline-block; width:1.55em; margin-right:.2em; font-size:1.05em; }\n    .wx-section h3 { color:#163b60; font-size:1.55rem; font-weight:700; }\n    .wx-scroll,.wx-days,.wx-insight,.wx-radar { border-color:rgba(255,255,255,.8); background:rgba(255,255,255,.48); box-shadow:0 12px 34px rgba(50,106,143,.1); backdrop-filter:blur(16px); }\n    .wx-scroll { border-radius:24px; }\n    .wx-hour { background:rgba(255,255,255,.38); border-right-color:rgba(104,154,185,.18); }\n    .wx-hour .wx-label { font-size:1.05rem; letter-spacing:.04em; }\n    .wx-hour strong { color:#173a5e; font-size:1.95rem; }\n    .wx-hour small { font-size:1.18rem; color:#506d88; }\n    .wx-forward-only .wx-hour { flex:1 1 0; min-width:128px; }\n    .wx-hour.wx-day-divider { border-left:2px solid rgba(82,115,142,.45); }\n    .wx-day-divider-label { display:block; min-height:12px; margin:-6px -4px 2px; color:#52738e; font-size:.62rem; font-weight:800; letter-spacing:.08em; text-transform:uppercase; }\n    .wx-icon { font-size:2.65rem; }\n    .wx-day { background:rgba(255,255,255,.3); border-bottom-color:rgba(104,154,185,.2); min-height:76px; }\n    .wx-day .wx-icon { font-size:2.65rem; }\n    .wx-day-temp { color:#173a5e; font-size:1.7rem; }\n    .wx-day small { font-size:1.18rem; color:#506d88; }\n    .wx-arrow { width:58px; height:92px; border-color:rgba(255,255,255,.9); border-radius:20px; background:rgba(255,255,255,.75); color:#176da8; box-shadow:0 10px 26px rgba(39,103,145,.2); font-size:2.7rem; backdrop-filter:blur(12px); }\n    .wx-arrow:hover,.wx-arrow:focus-visible { background:#fff; }\n    .wx-advice article { border-color:rgba(255,255,255,.8); background:rgba(255,255,255,.5); box-shadow:0 12px 30px rgba(50,106,143,.08); }\n    .wx-note { border-left-color:#319bc5; background:rgba(255,255,255,.54); }\n    .nshh-weather + .hhsg-lead { margin-top:28px; margin-bottom:0; }\n    .wx-air-quality { grid-column:1\/-1; }\n    .wx-air-quality strong { font-size:1.65rem; color:#173a5e; }\n    .wx-air-quality a { color:#176da8; font-weight:700; }\n    .wx-radar a { background:#1677c8; }\n    .wx-controls { border-top-color:rgba(75,130,163,.18); }\n    @media (max-width:800px){ .nshh-weather{width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);padding-left:0;padding-right:0}.wx-dashboard{padding-left:0;padding-right:0} }\n    @media (max-width:600px){ .wx-hero{border-radius:28px;padding:34px 20px;min-height:330px}.wx-title-row{display:block}.wx-title-date{display:block;margin-top:8px;white-space:normal}.wx-temp{font-size:clamp(6.5rem,27vw,9rem)}.wx-unit{font-size:clamp(2.5rem,10vw,3.6rem)}.wx-now{gap:14px}.wx-arrow{width:48px;height:78px}.wx-strip-wrap .wx-scroll{margin:0 52px}.wx-forward-only .wx-hour{flex:0 0 106px;min-width:106px}.wx-day .wx-icon,.wx-icon{font-size:2.3rem}.wx-hour small,.wx-day small{font-size:1.1rem} }\n  `;\n  document.head.appendChild(style);\n\n  const pageLang = (document.documentElement.lang || 'en').slice(0, 2).toLowerCase();\n  const pageLocale = pageLang === 'sv' ? 'sv-SE' : pageLang === 'de' ? 'de-DE' : pageLang === 'ru' ? 'ru-RU' : 'en-GB';\n  const dayName = new Intl.DateTimeFormat(pageLocale, { weekday: 'short', timeZone: 'Asia\/Bangkok' });\n  const hourName = new Intl.DateTimeFormat(pageLocale, { hour: '2-digit', minute: '2-digit', hour12: false, timeZone: 'Asia\/Bangkok' });\n  const dateKey = new Intl.DateTimeFormat('en-CA', { timeZone: 'Asia\/Bangkok' });\n  const icon = (row) => {\n    if (row.rain >= 1) return '\ud83c\udf27\ufe0f';\n    if (row.rain >= .2) return '\ud83c\udf26\ufe0f';\n    const localTime = hourName.format(new Date(row.time));\n    const [sunrise, sunset] = daylight(row.time);\n    if (localTime < sunrise || localTime >= sunset) return '\ud83c\udf19';\n    return row.temp >= 31 ? '\u2600\ufe0f' : '\ud83c\udf24\ufe0f';\n  };\n  const fmt = (n, suffix='') => `${Math.round(Number(n))}${suffix}`;\n  const daylight = (date) => {\n    const d = new Date(date); const day = Math.floor((Date.UTC(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate())-Date.UTC(d.getUTCFullYear(),0,0))\/86400000);\n    const decl = 23.44*Math.sin((2*Math.PI*(284+day))\/365)*Math.PI\/180; const lat=12.6*Math.PI\/180;\n    const ha=Math.acos((Math.cos(90.833*Math.PI\/180)-Math.sin(lat)*Math.sin(decl))\/(Math.cos(lat)*Math.cos(decl)));\n    const noon=12-100\/15; const rise=noon-ha*12\/Math.PI+7; const set=noon+ha*12\/Math.PI+7;\n    const clock=h=>`${String(Math.floor(h)%24).padStart(2,'0')}:${String(Math.round((h%1)*60)).padStart(2,'0')}`;\n    return [clock(rise),clock(set)];\n  };\n  const render = (rows, generatedAt, currentConditions = {}) => {\n    if (!rows?.length) return;\n    const currentIndex = rows.reduce((best, row, index) => Math.abs(Number(row.time) - Date.now()) < Math.abs(Number(rows[best]?.time ?? row.time) - Date.now()) ? index : best, 0);\n    \/\/ \u201cNext 24 hours\u201d must contain only upcoming forecast points. The feed is\n    \/\/ three-hourly, so at 10:10 the first valid point is 12:00\u2014not a made-up\n    \/\/ 10:00 or 11:00 value and not the nearest past point.\n    const nextIndex = rows.findIndex(row => Number(row.time) > Date.now());\n    \/\/ Keep the immediately preceding point available for the left arrow, while\n    \/\/ opening the strip on the first genuinely upcoming forecast point. This\n    \/\/ prevents the page from starting on an old slot (for example 10:00 when\n    \/\/ 13:00 is the next forecast point).\n    \/\/ Start the strip with the first genuinely upcoming forecast point. This\n    \/\/ prevents the page from opening on an old slot (for example 10:00 when\n    \/\/ 13:00 is the next forecast point).\n    const rangeStart = nextIndex >= 0 ? nextIndex : currentIndex;\n    const today = rows[currentIndex] || rows[0]; const ranges = rows.slice(rangeStart, rangeStart + 12);\n    const humidity = Number.isFinite(Number(currentConditions.humidity)) ? `${Math.round(Number(currentConditions.humidity))}%` : 'Unavailable';\n    const dewPointValue = Number(currentConditions.dewPoint); const dewPoint = Number.isFinite(dewPointValue) ? `${fmt(dewPointValue)}\u00b0C` : 'Unavailable';\n    const groups = new Map(); rows.forEach(r=>{const k=dateKey.format(new Date(r.time)); if(!groups.has(k)) groups.set(k,[]); groups.get(k).push(r);});\n    const currentDayKey = dateKey.format(new Date(today.time));\n    const days=[...groups.entries()].filter(([key])=>key!==currentDayKey).slice(0,7).map(([,g])=>({date:g[0].time,low:Math.min(...g.map(x=>x.low)),high:Math.max(...g.map(x=>x.high)),rain:g.reduce((a,x)=>a+x.rain,0)}));\n    const [sunrise,sunset]=daylight(today.time);\n    const warm = today.temp >= 30 ? 'Hot and tropical' : today.temp >= 26 ? 'Warm and tropical' : 'Comfortably warm';\n    const feels = today.temp >= 30 ? 'Feels warmer in the humidity' : 'Feels close to the air temperature';\n    root.innerHTML = `<div class=\"wx-dashboard\" aria-labelledby=\"wx-title\"><div class=\"wx-hero\"><div class=\"wx-hero-grid\"><div><span class=\"wx-eyebrow\">WeatherNext \u00b7 Hua Hin snapshot<\/span><h2 id=\"wx-title\">Hua Hin weather<\/h2><p>Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand<\/p><div class=\"wx-now\"><span class=\"wx-temp\">${fmt(today.temp)}<\/span><span class=\"wx-unit\">\u00b0C<\/span><div class=\"wx-condition\"><strong>${warm}<\/strong><br><span>${feels}<\/span><div class=\"wx-aqi-inline\" aria-live=\"polite\"><span>Air quality<\/span><strong id=\"wx-hero-aqi\">Loading\u2026<\/strong><\/div><\/div><\/div><\/div><div class=\"wx-panel\"><div class=\"wx-stat\"><small>Rain next hour<\/small><strong>${Number(today.rain).toFixed(1)} mm<\/strong><\/div><div class=\"wx-stat\"><small>Wind<\/small><strong>${Number(today.wind).toFixed(1)} km\/h<\/strong><\/div><div class=\"wx-stat\"><small>Daylight<\/small><strong><span class=\"wx-daylight-line\"><span class=\"wx-daylight-icon\" aria-hidden=\"true\">\ud83c\udf05<\/span>${sunrise}<\/span><span class=\"wx-daylight-line\"><span class=\"wx-daylight-icon\" aria-hidden=\"true\">\ud83c\udf07<\/span>${sunset}<\/span><\/strong><\/div><div class=\"wx-stat\"><small>Outlook range<\/small><strong>${fmt(today.low)}\u2013${fmt(today.high)}\u00b0<\/strong><\/div><\/div><\/div><\/div><section class=\"wx-section\" aria-labelledby=\"wx-hourly\"><h3 id=\"wx-hourly\">Next 24 hours<\/h3><div class=\"wx-scroll\">${ranges.map(r=>`<div class=\"wx-hour\"><span class=\"wx-label\">${hourName.format(new Date(r.time))}<\/span><span class=\"wx-icon\" aria-hidden=\"true\">${icon(r)}<\/span><strong>${fmt(r.temp)}\u00b0<\/strong><small>${Number(r.rain).toFixed(1)} mm<\/small><\/div>`).join('')}<\/div><\/section><section class=\"wx-section\" aria-labelledby=\"wx-days\"><h3 id=\"wx-days\">7-day forecast<\/h3><div class=\"wx-days\">${days.map((d,i)=>`<article class=\"wx-day\"><strong>${i===0?'Tomorrow':dayName.format(new Date(d.date))}<\/strong><span class=\"wx-icon\" aria-hidden=\"true\">${d.rain>4?'\ud83c\udf26\ufe0f':'\ud83c\udf24\ufe0f'}<\/span><div class=\"wx-day-temp\">${fmt(d.low)}\u00b0 \/ ${fmt(d.high)}\u00b0<\/div><div class=\"wx-range\" aria-hidden=\"true\"><\/div><small>${d.rain.toFixed(1)} mm rain<\/small><\/article>`).join('')}<\/div><\/section><section class=\"wx-section\" aria-labelledby=\"wx-details\"><h3 id=\"wx-details\">Comfort & daylight<\/h3><div class=\"wx-insights\"><div class=\"wx-insight\"><span class=\"wx-label\">Feels-like guidance<\/span><strong>${feels}<\/strong><span class=\"wx-muted\">Current Hua Hin humidity from the forecast feed.<\/span><\/div><div class=\"wx-insight\"><span class=\"wx-label\">Humidity<\/span><strong>${humidity}<\/strong><span class=\"wx-muted\">Current Hua Hin humidity from the forecast feed.<\/span><\/div><div class=\"wx-insight\"><span class=\"wx-label\">UV guidance<\/span><strong>Strong tropical sun<\/strong><span class=\"wx-muted\">Use shade and sunscreen around midday.<\/span><\/div><div class=\"wx-insight\"><span class=\"wx-label\">Sunrise \/ sunset<\/span><strong>${sunrise} \/ ${sunset}<\/strong><span class=\"wx-muted\">Hua Hin local time (ICT).<\/span><\/div><\/div><\/section><section class=\"wx-section wx-advice\" aria-label=\"Hua Hin practical advice\"><article><h4>Best for getting outdoors<\/h4><p>Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.<\/p><\/article><article><h4>Rain-smart planning<\/h4><p>Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.<\/p><\/article><\/section><p class=\"wx-note\"><strong>About this view:<\/strong> Google WeatherNext guidance, reduced to a small Hua Hin-only dataset and refreshed server-side. Check the <a href=\"https:\/\/www.tmd.go.th\/en\/warning-and-forecast\" target=\"_blank\" rel=\"noopener\">Thai Meteorological Department<\/a> for official warnings.<\/p><\/div>`;\n    const uiLang = pageLang;\n    const translations = {\n      sv: [['Hua Hin weather','V\u00e4der i Hua Hin'],['Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand','Senaste prognosen f\u00f6r Hua Hin, Prachuap Khiri Khan, Thailand'],['Rain next hour','Regn n\u00e4sta timme'],['Wind','Vind'],['Daylight','Dagsljus'],['Outlook range','Prognosintervall'],['Next 24 hours','N\u00e4sta 24 timmar'],['7-day forecast','7-dygnsprognos'],['Tomorrow','I morgon'],['Comfort & daylight','Komfort och dagsljus'],['Feels-like guidance','Upplevd temperatur'],['Humidity','Luftfuktighet'],['UV guidance','UV-r\u00e5d'],['Sunrise \/ sunset','Soluppg\u00e5ng \/ solnedg\u00e5ng'],['Not in compact export','Ing\u00e5r inte i den kompakta exporten'],['Strong tropical sun','Stark tropisk sol'],['Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.','Tidig morgon och sen eftermiddag \u00e4r vanligtvis de behagligaste tiderna f\u00f6r promenader, str\u00e4nder och \u00e4renden.']],\n      de: [['Hua Hin weather','Wetter in Hua Hin'],['Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand','Aktuelle Prognose f\u00fcr Hua Hin, Prachuap Khiri Khan, Thailand'],['Rain next hour','Regen n\u00e4chste Stunde'],['Wind','Wind'],['Daylight','Tageslicht'],['Outlook range','Prognosebereich'],['Next 24 hours','N\u00e4chste 24 Stunden'],['7-day forecast','7-Tage-Prognose'],['Tomorrow','Morgen'],['Comfort & daylight','Komfort und Tageslicht'],['Feels-like guidance','Gef\u00fchlte Temperatur'],['Humidity','Luftfeuchtigkeit'],['UV guidance','UV-Hinweise'],['Sunrise \/ sunset','Sonnenaufgang \/ Sonnenuntergang'],['Not in compact export','Nicht im kompakten Export enthalten'],['Strong tropical sun','Starke tropische Sonne'],['Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.','Fr\u00fcher Morgen und sp\u00e4ter Nachmittag sind normalerweise die angenehmsten Zeiten f\u00fcr Spazierg\u00e4nge, Strandbesuche und Erledigungen.']],\n      ru: [['Hua Hin weather','\u041f\u043e\u0433\u043e\u0434\u0430 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435'],['Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand','\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u0434\u043b\u044f \u0425\u0443\u0430\u0445\u0438\u043d\u0430, \u041f\u0440\u0430\u0447\u0443\u0430\u043f\u043a\u0445\u0438\u0440\u0438-\u0425\u0430\u043d, \u0422\u0430\u0438\u043b\u0430\u043d\u0434'],['Rain next hour','\u0414\u043e\u0436\u0434\u044c \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0439 \u0447\u0430\u0441'],['Wind','\u0412\u0435\u0442\u0435\u0440'],['Daylight','\u0421\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0434\u0435\u043d\u044c'],['Outlook range','\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430'],['Next 24 hours','\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 24 \u0447\u0430\u0441\u0430'],['7-day forecast','\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0430 7 \u0434\u043d\u0435\u0439'],['Tomorrow','\u0417\u0430\u0432\u0442\u0440\u0430'],['Comfort & daylight','\u041a\u043e\u043c\u0444\u043e\u0440\u0442 \u0438 \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0434\u0435\u043d\u044c'],['Feels-like guidance','\u041e\u0449\u0443\u0449\u0430\u0435\u043c\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430'],['Humidity','\u0412\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c'],['UV guidance','\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0423\u0424'],['Sunrise \/ sunset','\u0412\u043e\u0441\u0445\u043e\u0434 \/ \u0437\u0430\u043a\u0430\u0442'],['Not in compact export','\u041d\u0435\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435'],['Strong tropical sun','\u0421\u0438\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043b\u043d\u0446\u0435'],['Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.','\u0420\u0430\u043d\u043d\u0435\u0435 \u0443\u0442\u0440\u043e \u0438 \u043f\u043e\u0437\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0443\u043b\u043e\u043a, \u043f\u043b\u044f\u0436\u0430 \u0438 \u0434\u0435\u043b.']]\n    };\n    const extraTranslations = {\n      sv: [['WeatherNext \u00b7 Hua Hin snapshot','WeatherNext \u00b7 Hua Hin-\u00f6versikt'],['Hot and tropical','Varmt och tropiskt'],['Warm and tropical','Varmt och tropiskt'],['Comfortably warm','Behagligt varmt'],['Feels warmer in the humidity','K\u00e4nns varmare i luftfuktigheten'],['Feels close to the air temperature','K\u00e4nns n\u00e4ra lufttemperaturen'],['Air quality','Luftkvalitet'],['Loading\u2026','Laddar\u2026'],['Humidity','Luftfuktighet'],['Dew point','Daggpunkt'],['Strong tropical sun','Stark tropisk sol'],['Use shade and sunscreen around midday.','Anv\u00e4nd skugga och solskydd mitt p\u00e5 dagen.'],['Hua Hin local time (ICT).','Lokal tid i Hua Hin (ICT).'],['Current Hua Hin humidity from the forecast feed.','Aktuell luftfuktighet i Hua Hin fr\u00e5n prognosfl\u00f6det.'],['Best for getting outdoors','B\u00e4st f\u00f6r utomhusaktiviteter'],['Rain-smart planning','Regnsmart planering'],['Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.','Ha ett flexibelt inomhusalternativ n\u00e4r regnsignalen \u00f6kar. Nederb\u00f6rdsprognosen \u00e4r v\u00e4gledning, inte en officiell varning.'],['About this view:','Om denna vy:'],['Google WeatherNext guidance','Google WeatherNext-v\u00e4gledning']],\n      de: [['WeatherNext \u00b7 Hua Hin snapshot','WeatherNext \u00b7 Hua-Hin-\u00dcbersicht'],['Hot and tropical','Hei\u00df und tropisch'],['Warm and tropical','Warm und tropisch'],['Comfortably warm','Angenehm warm'],['Feels warmer in the humidity','F\u00fchlt sich durch die Luftfeuchtigkeit w\u00e4rmer an'],['Feels close to the air temperature','F\u00fchlt sich \u00e4hnlich wie die Lufttemperatur an'],['Air quality','Luftqualit\u00e4t'],['Loading\u2026','Wird geladen\u2026'],['Humidity','Luftfeuchtigkeit'],['Dew point','Taupunkt'],['Strong tropical sun','Starke tropische Sonne'],['Use shade and sunscreen around midday.','Nutzen Sie um die Mittagszeit Schatten und Sonnenschutz.'],['Hua Hin local time (ICT).','Ortszeit in Hua Hin (ICT).'],['Current Hua Hin humidity from the forecast feed.','Aktuelle Luftfeuchtigkeit in Hua Hin aus dem Prognose-Feed.'],['Best for getting outdoors','Am besten f\u00fcr Aktivit\u00e4ten im Freien'],['Rain-smart planning','Regensmarte Planung'],['Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.','Planen Sie eine flexible Aktivit\u00e4t im Innenbereich, wenn das st\u00fcndliche Regensignal steigt. Die Niederschlagsprognose ist eine Orientierung, keine offizielle Warnung.'],['About this view:','\u00dcber diese Ansicht:'],['Google WeatherNext guidance','Google-WeatherNext-Prognose']],\n      ru: [['WeatherNext \u00b7 Hua Hin snapshot','WeatherNext \u00b7 \u041e\u0431\u0437\u043e\u0440 \u0425\u0443\u0430\u0445\u0438\u043d\u0430'],['Hot and tropical','\u0416\u0430\u0440\u043a\u043e \u0438 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0438'],['Warm and tropical','\u0422\u0435\u043f\u043b\u043e \u0438 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0438'],['Comfortably warm','\u041a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0442\u0435\u043f\u043b\u043e'],['Feels warmer in the humidity','\u0418\u0437-\u0437\u0430 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0449\u0443\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043f\u043b\u0435\u0435'],['Feels close to the air temperature','\u041e\u0449\u0443\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430'],['Air quality','\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430'],['Loading\u2026','\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u2026'],['Humidity','\u0412\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c'],['Dew point','\u0422\u043e\u0447\u043a\u0430 \u0440\u043e\u0441\u044b'],['Strong tropical sun','\u0421\u0438\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043b\u043d\u0446\u0435'],['Use shade and sunscreen around midday.','\u0412 \u043f\u043e\u043b\u0434\u0435\u043d\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0442\u0435\u043d\u044c \u0438 \u0441\u043e\u043b\u043d\u0446\u0435\u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0439 \u043a\u0440\u0435\u043c.'],['Hua Hin local time (ICT).','\u041c\u0435\u0441\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0425\u0443\u0430\u0445\u0438\u043d\u0430 (ICT).'],['Current Hua Hin humidity from the forecast feed.','\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 \u0438\u0437 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430.'],['Best for getting outdoors','\u041b\u0443\u0447\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0443\u043b\u043e\u043a'],['Rain-smart planning','\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0434\u043e\u0436\u0434\u044f'],['Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.','\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043e\u0436\u0434\u044f \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043e\u0441\u0430\u0434\u043a\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u043c, \u0430 \u043d\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c.'],['About this view:','\u041e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0435:'],['Google WeatherNext guidance','\u041f\u0440\u043e\u0433\u043d\u043e\u0437 Google WeatherNext']]\n    };\n    if (extraTranslations[uiLang]) translations[uiLang].push(...extraTranslations[uiLang]);\n    const timeTranslations = {\n      sv: [['Current time in Hua Hin','Aktuell tid i Hua Hin'],['Last updated','Senast uppdaterad'],['Temperature unit','Temperaturenhet'],['Temperature','Temperatur'],['Good','Bra'],['Moderate','M\u00e5ttlig'],['Unhealthy for sensitive groups','Oh\u00e4lsosamt f\u00f6r k\u00e4nsliga grupper'],['Unhealthy','Oh\u00e4lsosamt'],['Very unhealthy','Mycket oh\u00e4lsosamt'],['Unavailable right now','Inte tillg\u00e4ngligt just nu'],['Air quality unavailable','Luftkvalitet inte tillg\u00e4nglig'],['Show earlier hours','Visa tidigare timmar'],['Show later hours','Visa senare timmar'],['mm rain','mm regn'],['Overall AQI','\u00d6vergripande AQI'],['overall US AQI','totalt US AQI'],['PM2.5 AQI','PM2.5-AQI'],['IQAir Hua Hin','IQAir Hua Hin'],['city US AQI','US AQI f\u00f6r staden']],\n      de: [['Current time in Hua Hin','Aktuelle Zeit in Hua Hin'],['Last updated','Zuletzt aktualisiert'],['Temperature unit','Temperatureinheit'],['Temperature','Temperatur'],['Good','Gut'],['Moderate','M\u00e4\u00dfig'],['Unhealthy for sensitive groups','Ungesund f\u00fcr empfindliche Gruppen'],['Unhealthy','Ungesund'],['Very unhealthy','Sehr ungesund'],['Unavailable right now','Derzeit nicht verf\u00fcgbar'],['Air quality unavailable','Luftqualit\u00e4t nicht verf\u00fcgbar'],['Show earlier hours','Fr\u00fchere Stunden anzeigen'],['Show later hours','Sp\u00e4tere Stunden anzeigen'],['mm rain','mm Regen'],['Overall AQI','Gesamter AQI'],['overall US AQI','gesamter US AQI'],['PM2.5 AQI','PM2.5-AQI'],['IQAir Hua Hin','IQAir Hua Hin'],['city US AQI','st\u00e4dtischer US AQI']],\n      ru: [['Current time in Hua Hin','\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435'],['Last updated','\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435'],['Temperature unit','\u0415\u0434\u0438\u043d\u0438\u0446\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b'],['Temperature','\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430'],['Good','\u0425\u043e\u0440\u043e\u0448\u043e'],['Moderate','\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e'],['Unhealthy for sensitive groups','\u0412\u0440\u0435\u0434\u043d\u043e \u0434\u043b\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f'],['Unhealthy','\u0412\u0440\u0435\u0434\u043d\u043e'],['Very unhealthy','\u041e\u0447\u0435\u043d\u044c \u0432\u0440\u0435\u0434\u043d\u043e'],['Unavailable right now','\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e'],['Air quality unavailable','\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e'],['Show earlier hours','\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0447\u0430\u0441\u044b'],['Show later hours','\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0447\u0430\u0441\u044b'],['mm rain','\u043c\u043c \u0434\u043e\u0436\u0434\u044f'],['Overall AQI','\u041e\u0431\u0449\u0438\u0439 AQI'],['overall US AQI','\u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 US AQI'],['PM2.5 AQI','AQI PM2.5'],['IQAir Hua Hin','IQAir \u0425\u0443\u0430\u0445\u0438\u043d'],['city US AQI','\u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0439 US AQI']]\n    };\n    if (timeTranslations[uiLang]) translations[uiLang].push(...timeTranslations[uiLang]);\n    const tr = text => (translations[uiLang] || []).reduce((value, pair) => value.split(pair[0]).join(pair[1]), text);\n    if (translations[uiLang]) {\n      let localized = root.innerHTML;\n      translations[uiLang].forEach(([from,to]) => { localized = localized.split(from).join(to); });\n      root.innerHTML = localized;\n    }\n    const condition = root.querySelector('.wx-condition');\n    if (condition) {\n      const details = document.createElement('div');\n      details.className = 'wx-current-details';\n      details.innerHTML = `<div><span>${tr('Humidity')}<\/span><strong>${humidity}<\/strong><\/div><div><span>${tr('Dew point')}<\/span><strong data-celsius=\"${Number.isFinite(dewPointValue) ? dewPointValue : ''}\">${dewPoint}<\/strong><\/div>`;\n      const aqi = condition.querySelector('.wx-aqi-inline');\n      if (aqi) condition.insertBefore(details, aqi); else condition.append(details);\n    }\n    root.querySelectorAll('.wx-hour').forEach((el,i)=>{\n      if (i === 0) return;\n      const previous = ranges[i - 1];\n      const current = ranges[i];\n      if (dateKey.format(new Date(previous.time)) !== dateKey.format(new Date(current.time))) {\n        el.classList.add('wx-day-divider');\n        const dividerLabel = document.createElement('span');\n        dividerLabel.className = 'wx-day-divider-label';\n        dividerLabel.textContent = dayName.format(new Date(current.time));\n        el.prepend(dividerLabel);\n      }\n    });\n    const eyebrow = root.querySelector('.wx-eyebrow');\n    if (eyebrow) eyebrow.innerHTML = '<img decoding=\"async\" class=\"wx-google-logo\" src=\"https:\/\/www.gstatic.com\/firebasejs\/ui\/2.0.0\/images\/auth\/google.svg\" alt=\"Google\">' + tr('WeatherNext \u00b7 Hua Hin snapshot');\n    const note = root.querySelector('.wx-note');\n    if (note) note.innerHTML = note.innerHTML.replace('Google WeatherNext guidance', 'Google WeatherNext guidance');\n    const title = root.querySelector('#wx-title');\n    if (title) {\n      const titleRow = document.createElement('div');\n      titleRow.className = 'wx-title-row';\n      const date = document.createElement('span');\n      date.className = 'wx-title-date';\n      date.textContent = new Intl.DateTimeFormat(pageLocale, { weekday:'long', day:'numeric', month:'long', year:'numeric', timeZone:'Asia\/Bangkok' }).format(new Date());\n      title.parentNode.insertBefore(titleRow, title);\n      titleRow.append(title, date);\n    }\n    root.querySelectorAll('.wx-day').forEach(el => el.children[2]?.classList.add('wx-day-temp'));\n    const radar = document.createElement('section');\n    radar.className = 'wx-section wx-radar';\n    radar.setAttribute('aria-labelledby', 'wx-radar-title');\n    radar.innerHTML = '<div><img decoding=\"async\" src=\"https:\/\/tiwrmdev.hii.or.th\/TyphoonTracking\/radarImages\/HHN\/HHN_lastest_status.jpg\" alt=\"Latest Hua Hin rain radar image from the Thai Meteorological Department\" loading=\"lazy\" referrerpolicy=\"no-referrer\"><p class=\"wx-muted\">Official Hua Hin radar image supplied by the Thai Meteorological Department. Times are shown in GMT on the source image.<\/p><\/div><div><span class=\"wx-label\">Live rain radar<\/span><h4 id=\"wx-radar-title\">Is rain moving toward Hua Hin?<\/h4><p>Use the radar for the next few hours, alongside the WeatherNext outlook above. Radar is especially useful for fast-moving showers that a forecast model can smooth out.<\/p><a href=\"https:\/\/tiwrmdev.hii.or.th\/DATA\/site\/radar_tmd_1.php?lang=en\" target=\"_blank\" rel=\"noopener\">Open official radar page<\/a><\/div>';\n    const radarImg = radar.querySelector('img');\n    if (radarImg) {\n      const frame = document.createElement('iframe');\n      frame.src = 'https:\/\/weather.tmd.go.th\/hhnLoop.php';\n      frame.title = 'Official Hua Hin radar loop from the Thai Meteorological Department';\n      frame.loading = 'lazy';\n      frame.referrerPolicy = 'no-referrer';\n      frame.style.cssText = 'display:block;width:100%;height:360px;border:0;border-radius:14px;background:#10213e;';\n      radarImg.replaceWith(frame);\n    }\n    const weeklySection = root.querySelector('[aria-labelledby=\"wx-days\"]');\n    if (weeklySection) weeklySection.after(radar);\n    else root.querySelector('.wx-note').before(radar);\n\n    const formatHuaHin = value => new Intl.DateTimeFormat(pageLocale, { weekday:'long', day:'numeric', month:'long', year:'numeric', hour:'2-digit', minute:'2-digit', hour12:false, timeZone:'Asia\/Bangkok' }).format(new Date(value));\n    const currentTime = document.createElement('div');\n    currentTime.className = 'wx-controls';\n    currentTime.innerHTML = '<div class=\"wx-time-meta\"><div>' + tr('Current time in Hua Hin') + ': <strong id=\"wx-current-time\"><\/strong><\/div><div>' + tr('Last updated') + ': <strong>' + formatHuaHin(generatedAt || today.time) + '<\/strong><\/div><\/div><div class=\"wx-unit-toggle\" aria-label=\"' + tr('Temperature unit') + '\"><span class=\"wx-label\" style=\"padding:0 6px\">' + tr('Temperature') + '<\/span><button type=\"button\" class=\"active\" data-unit=\"C\" aria-pressed=\"true\">\u00b0C<\/button><button type=\"button\" data-unit=\"F\" aria-pressed=\"false\">\u00b0F<\/button><\/div>';\n    root.querySelector('.wx-hero').append(currentTime);\n    const updateClock = () => { const el = root.querySelector('#wx-current-time'); if (el) el.textContent = formatHuaHin(Date.now()); };\n    updateClock(); setInterval(updateClock, 60000);\n\n    const strip = root.querySelector('.wx-scroll');\n    const stripWrap = document.createElement('div');\n    stripWrap.className = 'wx-strip-wrap';\n    strip.parentNode.insertBefore(stripWrap, strip);\n    stripWrap.append(strip);\n    const left = document.createElement('button'); left.className='wx-arrow left'; left.type='button'; left.setAttribute('aria-label',tr('Show earlier hours')); left.textContent='\u2039';\n    const right = document.createElement('button'); right.className='wx-arrow right'; right.type='button'; right.setAttribute('aria-label',tr('Show later hours')); right.textContent='\u203a';\n    left.addEventListener('click',()=>strip.scrollBy({left:-420,behavior:'smooth'})); right.addEventListener('click',()=>strip.scrollBy({left:420,behavior:'smooth'}));\n    stripWrap.append(left,right);\n\n    const celsius = value => Number(value);\n    const fahrenheit = value => Number(value) * 9 \/ 5 + 32;\n    root.querySelectorAll('.wx-hour').forEach((el,i)=>{ el.dataset.celsius = ranges[i]?.temp ?? ''; });\n    requestAnimationFrame(() => {\n      const firstUpcoming = nextIndex >= 0 ? nextIndex - rangeStart : 0;\n      const showFrom = strip.children[firstUpcoming]?.offsetLeft || 0;\n      strip.scrollLeft = showFrom;\n      \/\/ A second layout pass avoids browser scroll restoration or the first\n      \/\/ cached render leaving the strip on an earlier card.\n      window.setTimeout(() => { strip.scrollLeft = showFrom; }, 0);\n    });\n    root.querySelectorAll('.wx-day').forEach((el,i)=>{ el.dataset.lowC = days[i]?.low ?? ''; el.dataset.highC = days[i]?.high ?? ''; });\n    const toggleUnits = unit => {\n      root.querySelector('.wx-temp').textContent = fmt(unit === 'F' ? fahrenheit(celsius(today.temp)) : today.temp);\n      root.querySelector('.wx-unit').textContent = `\u00b0${unit}`;\n      root.querySelector('.wx-stat:last-child strong').textContent = `${fmt(unit === 'F' ? fahrenheit(today.low) : today.low)}\u2013${fmt(unit === 'F' ? fahrenheit(today.high) : today.high)}\u00b0`;\n      root.querySelectorAll('.wx-hour').forEach(el=>{ const v=Number(el.dataset.celsius); el.querySelector('strong').textContent=`${fmt(unit === 'F' ? fahrenheit(v) : v)}\u00b0`; });\n      root.querySelectorAll('.wx-day').forEach(el=>{ const low=Number(el.dataset.lowC),high=Number(el.dataset.highC); el.querySelector('.wx-day-temp').textContent=`${fmt(unit === 'F' ? fahrenheit(low) : low)}\u00b0 \/ ${fmt(unit === 'F' ? fahrenheit(high) : high)}\u00b0`; });\n      root.querySelectorAll('.wx-current-details strong[data-celsius]').forEach(el=>{ const v=Number(el.dataset.celsius); el.textContent=Number.isFinite(v) ? `${fmt(unit === 'F' ? fahrenheit(v) : v)}\u00b0${unit}` : 'Unavailable'; });\n      root.querySelectorAll('.wx-unit-toggle button').forEach(btn=>{ const active=btn.dataset.unit===unit; btn.classList.toggle('active',active); btn.setAttribute('aria-pressed',String(active)); });\n    };\n    root.querySelectorAll('.wx-unit-toggle button').forEach(btn=>btn.addEventListener('click',()=>toggleUnits(btn.dataset.unit)));\n\n    fetch('https:\/\/weather.nextstephuahin.com\/air-quality.json', { cache:'no-store' }).then(response => response.ok ? response.json() : Promise.reject(new Error('AQI unavailable'))).then(aqi => {\n      const value = Number(aqi.usAqi);\n      const label = tr(value <= 50 ? 'Good' : value <= 100 ? 'Moderate' : value <= 150 ? 'Unhealthy for sensitive groups' : value <= 200 ? 'Unhealthy' : 'Very unhealthy');\n      const statusClass = value <= 50 ? 'wx-aqi-good' : value <= 100 ? 'wx-aqi-moderate' : 'wx-aqi-unhealthy';\n      const heroAqi = root.querySelector('#wx-hero-aqi');\n      if (heroAqi) {\n        heroAqi.className = Number.isFinite(value) ? `wx-aqi-value ${statusClass}` : 'wx-aqi-value';\n        heroAqi.setAttribute('aria-label', Number.isFinite(value) ? `${tr('Air quality')}: ${Math.round(value)} US AQI, ${label}` : tr('Air quality unavailable'));\n        const pm25Aqi = Number(aqi.pm25Aqi);\n        const iqairAqi = Number(aqi.iqair?.usAqi);\n        const overall = Number.isFinite(value) ? `<div class=\"wx-aqi-primary\"><span>${tr('Overall AQI')}<\/span><strong>${Math.round(value)}<\/strong><em>${label}<\/em><\/div>` : '';\n        const supporting = [];\n        if (Number.isFinite(pm25Aqi)) supporting.push(`<div><span>${tr('PM2.5 AQI')}<\/span><strong>${Math.round(pm25Aqi)}<\/strong><\/div>`);\n        if (Number.isFinite(Number(aqi.pm25))) supporting.push(`<div><span>${tr('PM2.5')}<\/span><strong>${Number(aqi.pm25).toFixed(1)} <small>\u00b5g\/m\u00b3<\/small><\/strong><\/div>`);\n        if (Number.isFinite(iqairAqi)) supporting.push(`<div><span>${tr('IQAir Hua Hin')}<\/span><strong>${Math.round(iqairAqi)} <small>${tr('city US AQI')}<\/small><\/strong><\/div>`);\n        const summary = `${overall}<div class=\"wx-aqi-supporting\">${supporting.join('')}<\/div>`;\n        heroAqi.innerHTML = overall || supporting.length ? summary : tr('Unavailable right now');\n      }\n    }).catch(() => {\n      const heroAqi = root.querySelector('#wx-hero-aqi');\n      if (heroAqi) heroAqi.textContent = tr('Unavailable right now');\n    });\n\n    \/\/ Keep the explanatory\/source card as the final content block, below the forecast,\n    \/\/ radar and practical advice rather than interrupting the primary weather view.\n    const noteCard = root.querySelector('.wx-note');\n    if (noteCard) noteCard.remove();\n  };\n  if (window.nshhWorkerForecast && Array.isArray(window.nshhWorkerForecast.rows)) render(window.nshhWorkerForecast.rows, window.nshhWorkerForecast.generatedAt, window.nshhWorkerForecast.current || {});\n\n  \/\/ Keep an already-open weather page fresh without polling WeatherNext or\n  \/\/ reloading the long-lived WordPress page cache. Only the small Worker JSON\n  \/\/ payload is checked, so this adds no Google\/WeatherNext query cost.\n  let weatherRefreshDue = false;\n  let weatherRefreshTimer;\n  const refreshWeatherView = async () => {\n    if (document.visibilityState !== 'visible') {\n      weatherRefreshDue = true;\n      return;\n    }\n    try {\n      const response = await fetch('https:\/\/weather.nextstephuahin.com\/forecast.json?browser_refresh=' + Date.now(), { cache: 'no-store' });\n      if (!response.ok) return;\n      const latest = await response.json();\n      const current = window.nshhWorkerForecast || {};\n      if (Array.isArray(latest.rows) && (latest.generatedAt !== current.generatedAt || latest.sourceInitTime !== current.sourceInitTime)) {\n        window.nshhWorkerForecast = latest;\n        render(latest.rows, latest.generatedAt, latest.current || {});\n      }\n    } catch (_) {\n      \/\/ Keep the last good forecast visible if a background refresh fails.\n    }\n    weatherRefreshDue = false;\n  };\n  const scheduleWeatherRefresh = () => {\n    window.clearTimeout(weatherRefreshTimer);\n    weatherRefreshTimer = window.setTimeout(async () => {\n      await refreshWeatherView();\n      scheduleWeatherRefresh();\n    }, 30 * 60 * 1000);\n  };\n  \/\/ Replace any long-lived WordPress page-cache snapshot immediately with\n  \/\/ the current Worker payload, then continue with the background schedule.\n  refreshWeatherView();\n  scheduleWeatherRefresh();\n  document.addEventListener('visibilitychange', () => {\n    if (weatherRefreshDue && document.visibilityState === 'visible') {\n      refreshWeatherView();\n    }\n  });\n})();\n\n<\/script>\n<script data-no-optimize=\"1\">\n(() => {\n  const lang = (document.documentElement.lang || \"en\").toLowerCase().split(\"-\")[0];\n  const copy = {\n    sv: { alt:\"Senaste regnradarbilden f\u00f6r Hua Hin fr\u00e5n Thailands meteorologiska institut\", caption:\"Officiell radarbild f\u00f6r Hua Hin fr\u00e5n Thailands meteorologiska institut. Tiderna p\u00e5 k\u00e4llbilden visas i GMT.\", label:\"Live-regnradar\", title:\"R\u00f6r sig regn mot Hua Hin?\", body:\"Anv\u00e4nd radarn f\u00f6r de n\u00e4rmaste timmarna tillsammans med WeatherNext-prognosen ovan. Radarn \u00e4r s\u00e4rskilt anv\u00e4ndbar f\u00f6r snabba skurar som en prognosmodell kan j\u00e4mna ut.\", link:\"\u00d6ppna officiell radarsida\", linkLang:\"sv\" },\n    de: { alt:\"Aktuelles Hua-Hin-Regenradarbild des thail\u00e4ndischen Wetterdienstes\", caption:\"Offizielles Radarbild f\u00fcr Hua Hin, bereitgestellt vom thail\u00e4ndischen Wetterdienst. Die Zeiten im Quellbild sind in GMT angegeben.\", label:\"Live-Regenradar\", title:\"Zieht Regen auf Hua Hin zu?\", body:\"Nutzen Sie das Radar f\u00fcr die n\u00e4chsten Stunden zusammen mit der WeatherNext-Prognose oben. Das Radar ist besonders hilfreich bei schnell ziehenden Schauern, die ein Vorhersagemodell gl\u00e4tten kann.\", link:\"Offizielle Radarseite \u00f6ffnen\", linkLang:\"de\" },\n    ru: { alt:\"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0430\u0440\u0430 \u0434\u043e\u0436\u0434\u044f \u043d\u0430\u0434 \u0425\u0443\u0430\u0445\u0438\u043d\u043e\u043c \u043e\u0442 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u044b \u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0430\", caption:\"\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0434\u0438\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0425\u0443\u0430\u0445\u0438\u043d\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439 \u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0430. \u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e \u0413\u0440\u0438\u043d\u0432\u0438\u0447\u0443.\", label:\"\u0420\u0430\u0434\u0430\u0440 \u0434\u043e\u0436\u0434\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\", title:\"\u0414\u043e\u0436\u0434\u044c \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0425\u0443\u0430\u0445\u0438\u043d\u0430?\", body:\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0440\u0430\u0434\u0430\u0440 \u043d\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0447\u0430\u0441\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u043e\u043c WeatherNext \u0432\u044b\u0448\u0435. \u0420\u0430\u0434\u0430\u0440 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043b\u0438\u0432\u043d\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c.\", link:\"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0430\u0434\u0430\u0440\u0430\", linkLang:\"ru\" }\n  }[lang];\n  if (!copy) return;\n  const radar = document.querySelector(\".wx-radar\");\n  if (!radar) return;\n  const title = radar.querySelector(\"#wx-radar-title\");\n  const label = radar.querySelector(\".wx-label\");\n  const body = radar.querySelector(\"h4 + p\");\n  const caption = radar.querySelector(\".wx-muted\");\n  const link = radar.querySelector(\"a\");\n  const image = radar.querySelector(\"img\");\n  if (title) title.textContent = copy.title;\n  if (label) label.textContent = copy.label;\n  if (body) body.textContent = copy.body;\n  if (caption) caption.textContent = copy.caption;\n  if (link) { link.textContent = copy.link; link.href = \"https:\/\/tiwrmdev.hii.or.th\/DATA\/site\/radar_tmd_1.php?lang=\" + copy.linkLang; }\n  if (image) image.alt = copy.alt;\n  const frame = radar.querySelector(\"iframe\");\n  if (frame) frame.title = copy.title;\n})();\n<\/script>\n<div class=\"nshh-weather\" aria-label=\"Hua Hin weather forecast\">\n  <div class=\"nshh-weather-hero\">\n    <span class=\"nshh-weather-kicker\">WeatherNext forecast<\/span>\n    <h2>Hua Hin weather<\/h2>\n    <p>Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand<\/p>\n    <h3>Next 24 hours<\/h3>\n    <h3>7-day forecast<\/h3>\n    <p>Google WeatherNext guidance for Hua Hin. Check the Thai Meteorological Department for official warnings.<\/p>\n  <\/div>\n<\/div>\n<script data-no-optimize=\"1\">\nwindow.nshhWorkerForecast = {\"location\":\"Hua Hin, Thailand\",\"latitude\":12.5684,\"longitude\":99.9577,\"generatedAt\":\"2026-10-09T14:35:25.439Z\",\"source\":\"Open-Meteo fallback\",\"sourceInitTime\":\"2026-10-09T14:35:25.439Z\",\"latestAvailableInitTime\":\"2026-10-09T14:35:25.439Z\",\"current\":{\"time\":1791558000000,\"humidity\":88,\"dewPoint\":24.7},\"rows\":[{\"time\":1791504000000,\"temp\":27.1,\"low\":24.3,\"high\":31.8,\"wind\":5.4,\"rain\":0},{\"time\":1791514800000,\"temp\":29.5,\"low\":24.3,\"high\":31.8,\"wind\":8.1,\"rain\":0.2},{\"time\":1791525600000,\"temp\":31.8,\"low\":24.3,\"high\":31.8,\"wind\":11.9,\"rain\":0},{\"time\":1791536400000,\"temp\":31.1,\"low\":24.3,\"high\":31.8,\"wind\":13.4,\"rain\":0},{\"time\":1791547200000,\"temp\":28.7,\"low\":24.3,\"high\":31.8,\"wind\":3.4,\"rain\":0},{\"time\":1791558000000,\"temp\":26.9,\"low\":24.3,\"high\":31.8,\"wind\":5.8,\"rain\":0},{\"time\":1791568800000,\"temp\":26.4,\"low\":24.3,\"high\":31.8,\"wind\":5.3,\"rain\":0},{\"time\":1791579600000,\"temp\":24.7,\"low\":24.3,\"high\":31.8,\"wind\":12.3,\"rain\":0.1},{\"time\":1791590400000,\"temp\":24.5,\"low\":23.7,\"high\":29.5,\"wind\":8.8,\"rain\":0.7},{\"time\":1791601200000,\"temp\":28.5,\"low\":23.7,\"high\":29.5,\"wind\":15.9,\"rain\":0.3},{\"time\":1791612000000,\"temp\":29.5,\"low\":23.7,\"high\":29.5,\"wind\":15.2,\"rain\":0.2},{\"time\":1791622800000,\"temp\":28.7,\"low\":23.7,\"high\":29.5,\"wind\":12.9,\"rain\":0.8},{\"time\":1791633600000,\"temp\":26.1,\"low\":23.7,\"high\":29.5,\"wind\":3.9,\"rain\":0.4},{\"time\":1791644400000,\"temp\":24.2,\"low\":23.7,\"high\":29.5,\"wind\":13.9,\"rain\":1.4},{\"time\":1791655200000,\"temp\":24,\"low\":23.7,\"high\":29.5,\"wind\":12.4,\"rain\":0.1},{\"time\":1791666000000,\"temp\":24.1,\"low\":23.7,\"high\":29.5,\"wind\":10.5,\"rain\":0.1},{\"time\":1791676800000,\"temp\":24,\"low\":23.5,\"high\":28.2,\"wind\":8.7,\"rain\":0.4},{\"time\":1791687600000,\"temp\":26,\"low\":23.5,\"high\":28.2,\"wind\":6.9,\"rain\":0.9},{\"time\":1791698400000,\"temp\":27.7,\"low\":23.5,\"high\":28.2,\"wind\":7.7,\"rain\":0.3},{\"time\":1791709200000,\"temp\":28.1,\"low\":23.5,\"high\":28.2,\"wind\":8.1,\"rain\":0.2},{\"time\":1791720000000,\"temp\":26.5,\"low\":23.5,\"high\":28.2,\"wind\":3.5,\"rain\":0},{\"time\":1791730800000,\"temp\":26.1,\"low\":23.5,\"high\":28.2,\"wind\":9,\"rain\":0},{\"time\":1791741600000,\"temp\":25.2,\"low\":23.5,\"high\":28.2,\"wind\":10.7,\"rain\":0.6},{\"time\":1791752400000,\"temp\":23.5,\"low\":23.5,\"high\":28.2,\"wind\":14.2,\"rain\":1},{\"time\":1791763200000,\"temp\":24,\"low\":23.6,\"high\":29.1,\"wind\":12.7,\"rain\":0.9},{\"time\":1791774000000,\"temp\":26,\"low\":23.6,\"high\":29.1,\"wind\":7.7,\"rain\":1.4},{\"time\":1791784800000,\"temp\":28.6,\"low\":23.6,\"high\":29.1,\"wind\":14.4,\"rain\":0.2},{\"time\":1791795600000,\"temp\":28.9,\"low\":23.6,\"high\":29.1,\"wind\":9.9,\"rain\":0.3},{\"time\":1791806400000,\"temp\":27.3,\"low\":23.6,\"high\":29.1,\"wind\":7.2,\"rain\":0},{\"time\":1791817200000,\"temp\":25.4,\"low\":23.6,\"high\":29.1,\"wind\":8.1,\"rain\":0.3},{\"time\":1791828000000,\"temp\":24.9,\"low\":23.6,\"high\":29.1,\"wind\":3.8,\"rain\":0.2},{\"time\":1791838800000,\"temp\":24.3,\"low\":23.6,\"high\":29.1,\"wind\":12.8,\"rain\":1.9},{\"time\":1791849600000,\"temp\":23.9,\"low\":23.8,\"high\":29.3,\"wind\":10.8,\"rain\":0.1},{\"time\":1791860400000,\"temp\":27.2,\"low\":23.8,\"high\":29.3,\"wind\":11.6,\"rain\":1.2},{\"time\":1791871200000,\"temp\":29,\"low\":23.8,\"high\":29.3,\"wind\":15.7,\"rain\":0.2},{\"time\":1791882000000,\"temp\":29.2,\"low\":23.8,\"high\":29.3,\"wind\":10.1,\"rain\":0},{\"time\":1791892800000,\"temp\":27.2,\"low\":23.8,\"high\":29.3,\"wind\":3.4,\"rain\":0},{\"time\":1791903600000,\"temp\":25.4,\"low\":23.8,\"high\":29.3,\"wind\":10.5,\"rain\":1},{\"time\":1791914400000,\"temp\":24.5,\"low\":23.8,\"high\":29.3,\"wind\":10.9,\"rain\":0.2},{\"time\":1791925200000,\"temp\":24.1,\"low\":23.8,\"high\":29.3,\"wind\":11.8,\"rain\":0.3},{\"time\":1791936000000,\"temp\":24,\"low\":23.5,\"high\":29.3,\"wind\":12.4,\"rain\":1.6},{\"time\":1791946800000,\"temp\":27.1,\"low\":23.5,\"high\":29.3,\"wind\":15,\"rain\":0.3},{\"time\":1791957600000,\"temp\":29.2,\"low\":23.5,\"high\":29.3,\"wind\":15.8,\"rain\":0.1},{\"time\":1791968400000,\"temp\":28.8,\"low\":23.5,\"high\":29.3,\"wind\":9.3,\"rain\":0},{\"time\":1791979200000,\"temp\":27.1,\"low\":23.5,\"high\":29.3,\"wind\":1.5,\"rain\":0},{\"time\":1791990000000,\"temp\":25.7,\"low\":23.5,\"high\":29.3,\"wind\":4.9,\"rain\":0},{\"time\":1792000800000,\"temp\":25.2,\"low\":23.5,\"high\":29.3,\"wind\":8,\"rain\":0},{\"time\":1792011600000,\"temp\":23.9,\"low\":23.5,\"high\":29.3,\"wind\":9.3,\"rain\":0.3},{\"time\":1792022400000,\"temp\":23.8,\"low\":23.8,\"high\":29.9,\"wind\":9.7,\"rain\":1.2},{\"time\":1792033200000,\"temp\":28,\"low\":23.8,\"high\":29.9,\"wind\":9.9,\"rain\":0.1},{\"time\":1792044000000,\"temp\":29.6,\"low\":23.8,\"high\":29.9,\"wind\":12.4,\"rain\":0.2},{\"time\":1792054800000,\"temp\":29,\"low\":23.8,\"high\":29.9,\"wind\":7,\"rain\":0},{\"time\":1792065600000,\"temp\":27.2,\"low\":23.8,\"high\":29.9,\"wind\":2.8,\"rain\":0},{\"time\":1792076400000,\"temp\":26.3,\"low\":23.8,\"high\":29.9,\"wind\":1.5,\"rain\":0},{\"time\":1792087200000,\"temp\":25.6,\"low\":23.8,\"high\":29.9,\"wind\":6.3,\"rain\":0},{\"time\":1792098000000,\"temp\":24.7,\"low\":23.8,\"high\":29.9,\"wind\":7.5,\"rain\":0.5}]};\n<\/script>\n<script data-no-optimize=\"1\">\n(() => {\n  const root = document.querySelector('.nshh-weather');\n  if (!root) return;\n\n  \/\/ The captured site shell places the dark introductory lead before the\n  \/\/ dashboard. Keep it, but place it after the weather view instead.\n  const leadCard = document.querySelector('.hhsg-lead');\n  if (leadCard) root.after(leadCard);\n\n  const style = document.createElement('style');\n  style.textContent = `\n    .nshh-weather { max-width: 1180px; margin: 0 auto; color: #17213b; }\n    .wx-dashboard { --wx-navy:#17213b; --wx-blue:#1677c8; --wx-sky:#dff3ff; --wx-mint:#dcf7ee; --wx-line:#d9e6ef; font-family:\"Plus Jakarta Sans\",sans-serif; }\n    .wx-hero { position:relative; overflow:hidden; border-radius:28px; padding:clamp(24px,4vw,48px); color:#fff; background:radial-gradient(circle at 88% 12%,rgba(255,255,255,.26),transparent 24%),linear-gradient(135deg,#14204b,#1677c8 62%,#2bb7b1); box-shadow:0 18px 45px rgba(20,47,91,.22); }\n    .wx-hero:after { content:\"\"; position:absolute; width:220px; height:220px; right:-70px; bottom:-120px; border:28px solid rgba(255,255,255,.13); border-radius:50%; }\n    .wx-eyebrow { text-transform:uppercase; letter-spacing:.13em; font-size:.72rem; font-weight:800; opacity:.82; }\n    .wx-eyebrow { display:inline-flex; align-items:center; gap:8px; }\n    .wx-google-logo { width:17px; height:17px; display:block; flex:none; }\n    .wx-hero h2 { margin:.35rem 0 .2rem; color:#fff; font-size:clamp(2rem,5vw,3.75rem); line-height:1.05; }\n    .wx-title-row { display:flex; align-items:baseline; justify-content:space-between; gap:24px; }\n    .wx-title-date { flex:none; color:#52738e; font-size:clamp(.95rem,1.6vw,1.25rem); font-weight:700; letter-spacing:-.02em; white-space:nowrap; }\n    .wx-hero p { margin:0; opacity:.88; }\n    .wx-hero-grid { position:relative; z-index:1; display:grid; grid-template-columns:1.25fr .75fr; gap:22px; align-items:end; }\n    .wx-now { display:flex; align-items:end; gap:18px; margin-top:24px; }\n    .wx-temp { font-size:clamp(6.5rem,15vw,10rem); font-weight:800; line-height:.78; letter-spacing:-.1em; }\n    .wx-unit { font-size:2.2rem; opacity:.8; margin-bottom:.8rem; font-weight:700; }\n    .wx-condition { margin-bottom:.55rem; font-size:1.05rem; }\n    .wx-panel { position:relative; z-index:1; display:grid; grid-template-columns:1fr 1fr; gap:10px; }\n    .wx-stat { padding:14px; border:1px solid rgba(255,255,255,.25); border-radius:16px; background:rgba(255,255,255,.13); backdrop-filter:blur(7px); }\n    .wx-stat small,.wx-label { display:block; font-size:.72rem; text-transform:uppercase; letter-spacing:.08em; opacity:.78; font-weight:800; }\n    .wx-stat strong { display:block; margin-top:5px; font-size:1.08rem; }\n    .wx-section { margin-top:30px; }\n    .wx-section h3 { margin:0 0 12px; color:var(--wx-navy); font-size:1.35rem; }\n    .wx-muted { color:#63728a; font-size:.92rem; }\n    .wx-scroll { display:flex; gap:10px; overflow-x:auto; padding:2px 2px 13px; scroll-snap-type:x mandatory; }\n    .wx-hour { flex:0 0 88px; scroll-snap-align:start; text-align:center; padding:14px 8px; border:1px solid var(--wx-line); border-radius:16px; background:#fff; box-shadow:0 6px 18px rgba(23,33,59,.06); }\n    .wx-hour strong { display:block; margin:8px 0 4px; font-size:1.8rem; font-weight:800; letter-spacing:-.05em; }\n    .wx-hour small { display:block; font-size:1.02rem; font-weight:600; color:#5a718a; }\n    .wx-icon { display:block; font-size:2.15rem; line-height:1.1; }\n    .wx-days { display:grid; grid-template-columns:repeat(7,1fr); gap:10px; }\n    .wx-day { min-width:0; padding:16px 11px; border:1px solid var(--wx-line); border-radius:18px; background:linear-gradient(180deg,#fff,#f5fbff); text-align:center; }\n    .wx-day strong { display:block; }\n    .wx-day .wx-icon { margin:10px 0; font-size:2.35rem; }\n    .wx-range { height:6px; margin:13px 0 9px; border-radius:99px; background:linear-gradient(90deg,#55b8e8,#ffc763,#ef8354); }\n    .wx-day small { color:#61718a; }\n    .wx-day small { font-size:1.02rem; font-weight:600; }\n    .wx-insights { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; }\n    .wx-insight { padding:18px; border-radius:18px; background:#fff; border:1px solid var(--wx-line); box-shadow:0 7px 20px rgba(23,33,59,.05); }\n    .wx-insight strong { display:block; margin-top:7px; font-size:1.12rem; }\n    .wx-advice { display:grid; grid-template-columns:1fr 1fr; gap:14px; }\n    .wx-advice article { padding:20px; border-radius:18px; background:linear-gradient(135deg,var(--wx-mint),#fff); border:1px solid #bde9dc; }\n    .wx-advice h4 { margin:0 0 7px; }\n    .wx-note { margin-top:18px; padding:14px 16px; border-left:4px solid var(--wx-blue); background:var(--wx-sky); border-radius:10px; color:#30435d; font-size:.9rem; }\n    .wx-radar { display:grid; grid-template-columns:1fr .8fr; gap:18px; align-items:center; padding:18px; border:1px solid var(--wx-line); border-radius:20px; background:#fff; box-shadow:0 7px 20px rgba(23,33,59,.05); }\n    .wx-radar img { display:block; width:100%; max-height:380px; object-fit:contain; border-radius:14px; background:#10213e; }\n    .wx-radar h4 { margin:0 0 8px; font-size:1.2rem; }\n    .wx-radar a { display:inline-block; margin-top:12px; padding:10px 14px; border-radius:999px; background:var(--wx-navy); color:#fff; text-decoration:none; font-weight:700; }\n    @media (max-width:800px){ .wx-radar{grid-template-columns:1fr} }\n    @media (max-width:800px){ .wx-hero-grid,.wx-advice{grid-template-columns:1fr}.wx-days{grid-template-columns:repeat(7,minmax(106px,1fr));overflow-x:auto;display:flex;padding-bottom:10px}.wx-day{flex:0 0 106px}.wx-insights{grid-template-columns:1fr 1fr} }\n    @media (max-width:480px){ .wx-hero{border-radius:20px;padding:24px 18px}.wx-insights{grid-template-columns:1fr 1fr}.wx-stat{padding:11px}.wx-temp{font-size:4.7rem} }\n    @media (prefers-reduced-motion:reduce){ *{scroll-behavior:auto!important} }\n    \/* Weather-channel-inspired refinement: calm white cards, clear hierarchy and compact forecast rows. *\/\n    .wx-dashboard { max-width:1060px; margin:0 auto; padding:0 0 28px; color:#253247; }\n    .wx-hero { border-radius:12px; padding:28px 30px; color:#253247; background:#fff; border:1px solid #dfe6ec; box-shadow:0 2px 8px rgba(31,50,73,.08); }\n    .wx-hero:after { display:none; }\n    .wx-eyebrow,.wx-label,.wx-stat small { color:#65758a; opacity:1; letter-spacing:.1em; }\n    .wx-hero h2 { color:#172b4d; font-size:clamp(2rem,4vw,3rem); }\n    .wx-hero p { color:#607086; opacity:1; }\n    .wx-now { margin-top:28px; }\n    .wx-temp { color:#172b4d; font-size:clamp(4.5rem,9vw,6.5rem); }\n    .wx-unit,.wx-condition { color:#51647a; }\n    .wx-panel { gap:0; border-top:1px solid #e5ebf0; border-left:1px solid #e5ebf0; }\n    .wx-stat { border:0; border-right:1px solid #e5ebf0; border-bottom:1px solid #e5ebf0; border-radius:0; background:#fff; backdrop-filter:none; }\n    .wx-stat strong { color:#172b4d; }\n    .wx-section { margin-top:26px; }\n    .wx-section h3 { font-size:1.2rem; }\n    .wx-scroll { gap:0; padding:0; border:1px solid #dfe6ec; border-radius:12px; background:#fff; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-hour { flex:0 0 86px; border:0; border-right:1px solid #edf1f4; border-radius:0; box-shadow:none; background:#fff; }\n    .wx-hour:first-child { border-radius:12px 0 0 12px; }\n    .wx-hour:last-child { border-right:0; border-radius:0 12px 12px 0; }\n    .wx-days { display:block; border:1px solid #dfe6ec; border-radius:12px; overflow:hidden; background:#fff; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-day { display:grid; grid-template-columns:74px 42px 105px 1fr 90px; gap:12px; align-items:center; min-height:66px; padding:10px 16px; border:0; border-bottom:1px solid #edf1f4; border-radius:0; background:#fff; text-align:left; }\n    .wx-day:last-child { border-bottom:0; }\n    .wx-day .wx-icon { margin:0; }\n    .wx-range { grid-column:4; grid-row:1; margin:0; max-width:240px; }\n    .wx-day small { grid-column:5; grid-row:1; text-align:right; }\n    .wx-insight { border-radius:12px; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-radar { border-radius:12px; box-shadow:0 2px 8px rgba(31,50,73,.06); }\n    .wx-radar a { background:#1677c8; }\n    .wx-section[aria-labelledby=\"wx-details\"], .wx-advice { display:none !important; }\n    .wx-current-details { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; width:100%; margin-top:12px; color:#52738e; font-size:.82rem; font-weight:700; }\n    .wx-current-details > div { min-width:0; display:flex; flex-direction:column; gap:4px; padding:12px 14px; border:1px solid rgba(82,115,142,.22); border-radius:14px; background:rgba(255,255,255,.58); box-sizing:border-box; }\n    .wx-current-details span { display:block; text-transform:uppercase; letter-spacing:.06em; font-size:.68rem; line-height:1.2; font-weight:800; }\n    .wx-current-details strong { color:#173c66; font-size:1.15rem; line-height:1.2; overflow-wrap:anywhere; }\n    @media (max-width:480px){ .wx-current-details { grid-template-columns:1fr; } }\n    @media (max-width:800px){ .wx-day{grid-template-columns:62px 34px 78px 1fr 72px;gap:8px;padding:10px}.wx-range{max-width:130px}.wx-day small{font-size:.72rem}.wx-dashboard{padding-left:12px;padding-right:12px} }\n    @media (max-width:480px){ .wx-hero{padding:22px 18px}.wx-day{grid-template-columns:54px 30px 72px 1fr 60px;font-size:.86rem}.wx-range{max-width:70px}.wx-day small{font-size:.68rem} }\n    .wx-dashboard, .wx-dashboard * { font-family:\"Plus Jakarta Sans\",\"Avenir Next\",system-ui,sans-serif !important; font-synthesis:none; }\n    .wx-dashboard h2,.wx-dashboard h3,.wx-dashboard h4,.wx-dashboard strong { letter-spacing:-.025em; }\n    .wx-strip-wrap { position:relative; display:flex; align-items:stretch; }\n    .wx-strip-wrap .wx-scroll { flex:1; margin:0 48px; }\n    .wx-arrow { position:absolute; z-index:2; top:50%; transform:translateY(-50%); width:42px; height:68px; border:1px solid #cbd8e3; border-radius:12px; background:#fff; color:#1677c8; box-shadow:0 3px 10px rgba(31,50,73,.14); font:800 2rem\/1 \"Plus Jakarta Sans\",sans-serif; cursor:pointer; }\n    .wx-arrow:hover,.wx-arrow:focus-visible { background:#eaf6ff; border-color:#1677c8; outline:3px solid rgba(22,119,200,.2); }\n    .wx-arrow.left { left:0; }.wx-arrow.right { right:0; }\n    .wx-forward-only .wx-scroll { margin-left:0; }\n    .wx-controls { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-top:18px; padding-top:14px; border-top:1px solid #e5ebf0; }\n    .wx-time-meta { color:#64748b; font-size:.86rem; line-height:1.6; }\n    .wx-time-meta strong { color:#253247; }\n    .wx-unit-toggle { display:inline-flex; align-items:center; gap:4px; padding:4px; border:1px solid #cbd8e3; border-radius:999px; background:#f7fafc; }\n    .wx-unit-toggle button { min-width:42px; border:0; border-radius:999px; padding:7px 10px; background:transparent; color:#5c6c80; font:700 .82rem \"Plus Jakarta Sans\",sans-serif; cursor:pointer; }\n    .wx-temp,.wx-hour strong,.wx-day-temp,.wx-stat strong { font-variant-numeric:tabular-nums; }\n    .wx-day-temp { font-size:1.55rem; font-weight:800; letter-spacing:-.045em; color:#172b4d; }\n    .wx-unit-toggle button.active { background:#1677c8; color:#fff; box-shadow:0 2px 5px rgba(22,119,200,.25); }\n    @media (max-width:480px){ .wx-temp{font-size:clamp(5.8rem,25vw,8rem)}.wx-hour strong{font-size:1.65rem}.wx-hour .wx-icon{font-size:2rem}.wx-day .wx-icon{font-size:2.1rem}.wx-day-temp{font-size:1.35rem} }\n    @media (max-width:600px){ .wx-strip-wrap .wx-scroll{margin:0 40px}.wx-arrow{width:36px;height:60px}.wx-controls{align-items:flex-start;flex-direction:column}.wx-unit-toggle{align-self:flex-end} }\n    \/* Light atmospheric reference treatment: airy sky, frosted cards, high-contrast figures. *\/\n    .nshh-weather { max-width:none; padding:0 16px 64px; position:relative; overflow:hidden; background:linear-gradient(160deg,#dff4ff 0%,#f7fbff 42%,#fff7e9 100%); }\n    .nshh-weather:before,.nshh-weather:after { content:\"\"; position:absolute; border-radius:50%; filter:blur(3px); pointer-events:none; }\n    .nshh-weather:before { width:48vw; height:28vw; top:-8vw; left:-12vw; background:rgba(255,255,255,.78); box-shadow:34vw 12vw 0 5vw rgba(255,255,255,.38),72vw 4vw 0 2vw rgba(255,255,255,.55); }\n    .nshh-weather:after { width:34vw; height:34vw; right:-14vw; bottom:8vw; background:rgba(255,218,151,.22); }\n    .wx-dashboard { position:relative; z-index:1; max-width:1120px; color:#142c4c; }\n    .wx-hero { min-height:380px; padding:clamp(30px,6vw,72px) clamp(24px,6vw,74px); border:1px solid rgba(255,255,255,.76); border-radius:36px; color:#17365a; background:linear-gradient(135deg,rgba(255,255,255,.78),rgba(230,246,255,.58)); box-shadow:0 22px 70px rgba(48,104,139,.16); backdrop-filter:blur(22px); }\n    .wx-hero h2 { color:#15385c; font-size:clamp(2.8rem,8vw,6rem); font-weight:500; letter-spacing:-.075em; }\n    .wx-hero p,.wx-unit,.wx-condition { color:#4d6a85; }\n    .wx-eyebrow,.wx-label,.wx-stat small { color:#52738e; }\n    .wx-now { align-items:center; gap:22px; }\n    .wx-temp { color:#14375c; font-size:clamp(7rem,17vw,12rem); font-weight:400; letter-spacing:-.12em; line-height:.72; }\n    .wx-unit { align-self:flex-start; margin-top:0; margin-bottom:0; line-height:1; font-size:clamp(2.6rem,5vw,4.2rem); font-weight:700; color:#55748f; }\n    .wx-condition { font-size:1.1rem; }\n    .wx-aqi-inline { margin-top:14px; padding-top:12px; border-top:1px solid rgba(82,115,142,.24); color:#52738e; font-size:.88rem; }\n    .wx-aqi-inline span { display:block; text-transform:uppercase; letter-spacing:.08em; font-size:.7rem; font-weight:800; }\n    .wx-aqi-inline { width:100%; max-width:100%; box-sizing:border-box; }\n    .wx-aqi-inline strong { display:block; width:100%; max-width:100%; box-sizing:border-box; margin-top:3px; color:#173a5e; font-size:1rem !important; line-height:1.5 !important; font-weight:700; overflow-wrap:anywhere; word-break:normal; }\n    .wx-aqi-inline strong small { font-size:.86rem !important; line-height:1.45 !important; }\n    .wx-aqi-inline strong.wx-aqi-good,\n    .wx-aqi-inline strong.wx-aqi-moderate,\n    .wx-aqi-inline strong.wx-aqi-unhealthy { position:relative; padding:7px 10px 8px 29px; border-radius:12px; }\n    .wx-aqi-inline strong.wx-aqi-good { background:#e3f6ea; color:#176b3a; }\n    .wx-aqi-inline strong.wx-aqi-moderate { background:#fff4cf; color:#775700; }\n    .wx-aqi-inline strong.wx-aqi-unhealthy { background:#fde0e0; color:#a52c2c; }\n    .wx-aqi-inline strong.wx-aqi-good::before,\n    .wx-aqi-inline strong.wx-aqi-moderate::before,\n    .wx-aqi-inline strong.wx-aqi-unhealthy::before { content:\"\"; position:absolute; left:11px; top:13px; width:10px; height:10px; border-radius:50%; }\n    .wx-aqi-inline strong.wx-aqi-good::before { background:#2ca66f; }\n    .wx-aqi-inline strong.wx-aqi-moderate::before { background:#e0a900; }\n    .wx-aqi-inline strong.wx-aqi-unhealthy::before { background:#d94b4b; }\n    .wx-aqi-inline strong small { display:block; margin-top:2px; color:inherit; font-size:.82rem; font-weight:600; }\n    .wx-aqi-inline strong.wx-aqi-value { display:block; width:100%; box-sizing:border-box; margin-top:6px; padding:14px 16px; border-radius:16px; font-size:1rem !important; line-height:1.35 !important; font-weight:700; overflow-wrap:anywhere; white-space:normal; }\n    .wx-aqi-inline strong.wx-aqi-value::before { display:none; }\n    .wx-aqi-inline .wx-aqi-primary { display:grid; grid-template-columns:auto 1fr; column-gap:10px; align-items:baseline; }\n    .wx-aqi-inline .wx-aqi-primary span,\n    .wx-aqi-inline .wx-aqi-supporting span { display:block; text-transform:none; letter-spacing:0; font-size:.76rem !important; line-height:1.2 !important; font-weight:700; opacity:.8; }\n    .wx-aqi-inline .wx-aqi-primary strong { grid-column:1; grid-row:1 \/ span 2; margin:0; padding:0; background:none; color:inherit; font-size:2rem !important; line-height:1 !important; }\n    .wx-aqi-inline .wx-aqi-primary em { grid-column:2; font-style:normal; font-size:.88rem; line-height:1.2; font-weight:700; }\n    .wx-aqi-inline .wx-aqi-supporting { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin-top:12px; padding-top:10px; border-top:1px solid rgba(165,44,44,.18); }\n    .wx-aqi-inline .wx-aqi-supporting > div { min-width:0; }\n    .wx-aqi-inline .wx-aqi-supporting strong { display:block; margin:3px 0 0; padding:0; background:none; color:inherit; font-size:.95rem !important; line-height:1.25 !important; overflow-wrap:anywhere; }\n    .wx-aqi-inline .wx-aqi-supporting small { display:inline; margin:0; font-size:.7rem !important; line-height:1.2 !important; font-weight:600; }\n    @media(max-width:600px){\n      .wx-aqi-inline strong.wx-aqi-value { padding:12px 13px; }\n      .wx-aqi-inline .wx-aqi-primary strong { font-size:1.75rem !important; }\n      .wx-aqi-inline .wx-aqi-supporting { grid-template-columns:repeat(2,minmax(0,1fr)); }\n    }\n    .wx-panel { gap:12px; }\n    .wx-stat { border:1px solid rgba(255,255,255,.72); border-radius:22px; background:rgba(255,255,255,.47); box-shadow:0 8px 28px rgba(53,109,145,.08); }\n    .wx-stat strong { color:#173a5e; font-size:1.3rem; }\n    .wx-daylight-line { display:block; white-space:nowrap; }\n    .wx-daylight-line + .wx-daylight-line { margin-top:5px; }\n    .wx-daylight-icon { display:inline-block; width:1.55em; margin-right:.2em; font-size:1.05em; }\n    .wx-section h3 { color:#163b60; font-size:1.55rem; font-weight:700; }\n    .wx-scroll,.wx-days,.wx-insight,.wx-radar { border-color:rgba(255,255,255,.8); background:rgba(255,255,255,.48); box-shadow:0 12px 34px rgba(50,106,143,.1); backdrop-filter:blur(16px); }\n    .wx-scroll { border-radius:24px; }\n    .wx-hour { background:rgba(255,255,255,.38); border-right-color:rgba(104,154,185,.18); }\n    .wx-hour .wx-label { font-size:1.05rem; letter-spacing:.04em; }\n    .wx-hour strong { color:#173a5e; font-size:1.95rem; }\n    .wx-hour small { font-size:1.18rem; color:#506d88; }\n    .wx-forward-only .wx-hour { flex:1 1 0; min-width:128px; }\n    .wx-hour.wx-day-divider { border-left:2px solid rgba(82,115,142,.45); }\n    .wx-day-divider-label { display:block; min-height:12px; margin:-6px -4px 2px; color:#52738e; font-size:.62rem; font-weight:800; letter-spacing:.08em; text-transform:uppercase; }\n    .wx-icon { font-size:2.65rem; }\n    .wx-day { background:rgba(255,255,255,.3); border-bottom-color:rgba(104,154,185,.2); min-height:76px; }\n    .wx-day .wx-icon { font-size:2.65rem; }\n    .wx-day-temp { color:#173a5e; font-size:1.7rem; }\n    .wx-day small { font-size:1.18rem; color:#506d88; }\n    .wx-arrow { width:58px; height:92px; border-color:rgba(255,255,255,.9); border-radius:20px; background:rgba(255,255,255,.75); color:#176da8; box-shadow:0 10px 26px rgba(39,103,145,.2); font-size:2.7rem; backdrop-filter:blur(12px); }\n    .wx-arrow:hover,.wx-arrow:focus-visible { background:#fff; }\n    .wx-advice article { border-color:rgba(255,255,255,.8); background:rgba(255,255,255,.5); box-shadow:0 12px 30px rgba(50,106,143,.08); }\n    .wx-note { border-left-color:#319bc5; background:rgba(255,255,255,.54); }\n    .nshh-weather + .hhsg-lead { margin-top:28px; margin-bottom:0; }\n    .wx-air-quality { grid-column:1\/-1; }\n    .wx-air-quality strong { font-size:1.65rem; color:#173a5e; }\n    .wx-air-quality a { color:#176da8; font-weight:700; }\n    .wx-radar a { background:#1677c8; }\n    .wx-controls { border-top-color:rgba(75,130,163,.18); }\n    @media (max-width:800px){ .nshh-weather{width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);padding-left:0;padding-right:0}.wx-dashboard{padding-left:0;padding-right:0} }\n    @media (max-width:600px){ .wx-hero{border-radius:28px;padding:34px 20px;min-height:330px}.wx-title-row{display:block}.wx-title-date{display:block;margin-top:8px;white-space:normal}.wx-temp{font-size:clamp(6.5rem,27vw,9rem)}.wx-unit{font-size:clamp(2.5rem,10vw,3.6rem)}.wx-now{gap:14px}.wx-arrow{width:48px;height:78px}.wx-strip-wrap .wx-scroll{margin:0 52px}.wx-forward-only .wx-hour{flex:0 0 106px;min-width:106px}.wx-day .wx-icon,.wx-icon{font-size:2.3rem}.wx-hour small,.wx-day small{font-size:1.1rem} }\n  `;\n  document.head.appendChild(style);\n\n  const pageLang = (document.documentElement.lang || 'en').slice(0, 2).toLowerCase();\n  const pageLocale = pageLang === 'sv' ? 'sv-SE' : pageLang === 'de' ? 'de-DE' : pageLang === 'ru' ? 'ru-RU' : 'en-GB';\n  const dayName = new Intl.DateTimeFormat(pageLocale, { weekday: 'short', timeZone: 'Asia\/Bangkok' });\n  const hourName = new Intl.DateTimeFormat(pageLocale, { hour: '2-digit', minute: '2-digit', hour12: false, timeZone: 'Asia\/Bangkok' });\n  const dateKey = new Intl.DateTimeFormat('en-CA', { timeZone: 'Asia\/Bangkok' });\n  const icon = (row) => {\n    if (row.rain >= 1) return '\ud83c\udf27\ufe0f';\n    if (row.rain >= .2) return '\ud83c\udf26\ufe0f';\n    const localTime = hourName.format(new Date(row.time));\n    const [sunrise, sunset] = daylight(row.time);\n    if (localTime < sunrise || localTime >= sunset) return '\ud83c\udf19';\n    return row.temp >= 31 ? '\u2600\ufe0f' : '\ud83c\udf24\ufe0f';\n  };\n  const fmt = (n, suffix='') => `${Math.round(Number(n))}${suffix}`;\n  const daylight = (date) => {\n    const d = new Date(date); const day = Math.floor((Date.UTC(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate())-Date.UTC(d.getUTCFullYear(),0,0))\/86400000);\n    const decl = 23.44*Math.sin((2*Math.PI*(284+day))\/365)*Math.PI\/180; const lat=12.6*Math.PI\/180;\n    const ha=Math.acos((Math.cos(90.833*Math.PI\/180)-Math.sin(lat)*Math.sin(decl))\/(Math.cos(lat)*Math.cos(decl)));\n    const noon=12-100\/15; const rise=noon-ha*12\/Math.PI+7; const set=noon+ha*12\/Math.PI+7;\n    const clock=h=>`${String(Math.floor(h)%24).padStart(2,'0')}:${String(Math.round((h%1)*60)).padStart(2,'0')}`;\n    return [clock(rise),clock(set)];\n  };\n  const render = (rows, generatedAt, currentConditions = {}) => {\n    if (!rows?.length) return;\n    const currentIndex = rows.reduce((best, row, index) => Math.abs(Number(row.time) - Date.now()) < Math.abs(Number(rows[best]?.time ?? row.time) - Date.now()) ? index : best, 0);\n    \/\/ \u201cNext 24 hours\u201d must contain only upcoming forecast points. The feed is\n    \/\/ three-hourly, so at 10:10 the first valid point is 12:00\u2014not a made-up\n    \/\/ 10:00 or 11:00 value and not the nearest past point.\n    const nextIndex = rows.findIndex(row => Number(row.time) > Date.now());\n    \/\/ Keep the immediately preceding point available for the left arrow, while\n    \/\/ opening the strip on the first genuinely upcoming forecast point. This\n    \/\/ prevents the page from starting on an old slot (for example 10:00 when\n    \/\/ 13:00 is the next forecast point).\n    \/\/ Start the strip with the first genuinely upcoming forecast point. This\n    \/\/ prevents the page from opening on an old slot (for example 10:00 when\n    \/\/ 13:00 is the next forecast point).\n    const rangeStart = nextIndex >= 0 ? nextIndex : currentIndex;\n    const today = rows[currentIndex] || rows[0]; const ranges = rows.slice(rangeStart, rangeStart + 12);\n    const humidity = Number.isFinite(Number(currentConditions.humidity)) ? `${Math.round(Number(currentConditions.humidity))}%` : 'Unavailable';\n    const dewPointValue = Number(currentConditions.dewPoint); const dewPoint = Number.isFinite(dewPointValue) ? `${fmt(dewPointValue)}\u00b0C` : 'Unavailable';\n    const groups = new Map(); rows.forEach(r=>{const k=dateKey.format(new Date(r.time)); if(!groups.has(k)) groups.set(k,[]); groups.get(k).push(r);});\n    const currentDayKey = dateKey.format(new Date(today.time));\n    const days=[...groups.entries()].filter(([key])=>key!==currentDayKey).slice(0,7).map(([,g])=>({date:g[0].time,low:Math.min(...g.map(x=>x.low)),high:Math.max(...g.map(x=>x.high)),rain:g.reduce((a,x)=>a+x.rain,0)}));\n    const [sunrise,sunset]=daylight(today.time);\n    const warm = today.temp >= 30 ? 'Hot and tropical' : today.temp >= 26 ? 'Warm and tropical' : 'Comfortably warm';\n    const feels = today.temp >= 30 ? 'Feels warmer in the humidity' : 'Feels close to the air temperature';\n    root.innerHTML = `<div class=\"wx-dashboard\" aria-labelledby=\"wx-title\"><div class=\"wx-hero\"><div class=\"wx-hero-grid\"><div><span class=\"wx-eyebrow\">WeatherNext \u00b7 Hua Hin snapshot<\/span><h2 id=\"wx-title\">Hua Hin weather<\/h2><p>Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand<\/p><div class=\"wx-now\"><span class=\"wx-temp\">${fmt(today.temp)}<\/span><span class=\"wx-unit\">\u00b0C<\/span><div class=\"wx-condition\"><strong>${warm}<\/strong><br><span>${feels}<\/span><div class=\"wx-aqi-inline\" aria-live=\"polite\"><span>Air quality<\/span><strong id=\"wx-hero-aqi\">Loading\u2026<\/strong><\/div><\/div><\/div><\/div><div class=\"wx-panel\"><div class=\"wx-stat\"><small>Rain next hour<\/small><strong>${Number(today.rain).toFixed(1)} mm<\/strong><\/div><div class=\"wx-stat\"><small>Wind<\/small><strong>${Number(today.wind).toFixed(1)} km\/h<\/strong><\/div><div class=\"wx-stat\"><small>Daylight<\/small><strong><span class=\"wx-daylight-line\"><span class=\"wx-daylight-icon\" aria-hidden=\"true\">\ud83c\udf05<\/span>${sunrise}<\/span><span class=\"wx-daylight-line\"><span class=\"wx-daylight-icon\" aria-hidden=\"true\">\ud83c\udf07<\/span>${sunset}<\/span><\/strong><\/div><div class=\"wx-stat\"><small>Outlook range<\/small><strong>${fmt(today.low)}\u2013${fmt(today.high)}\u00b0<\/strong><\/div><\/div><\/div><\/div><section class=\"wx-section\" aria-labelledby=\"wx-hourly\"><h3 id=\"wx-hourly\">Next 24 hours<\/h3><div class=\"wx-scroll\">${ranges.map(r=>`<div class=\"wx-hour\"><span class=\"wx-label\">${hourName.format(new Date(r.time))}<\/span><span class=\"wx-icon\" aria-hidden=\"true\">${icon(r)}<\/span><strong>${fmt(r.temp)}\u00b0<\/strong><small>${Number(r.rain).toFixed(1)} mm<\/small><\/div>`).join('')}<\/div><\/section><section class=\"wx-section\" aria-labelledby=\"wx-days\"><h3 id=\"wx-days\">7-day forecast<\/h3><div class=\"wx-days\">${days.map((d,i)=>`<article class=\"wx-day\"><strong>${i===0?'Tomorrow':dayName.format(new Date(d.date))}<\/strong><span class=\"wx-icon\" aria-hidden=\"true\">${d.rain>4?'\ud83c\udf26\ufe0f':'\ud83c\udf24\ufe0f'}<\/span><div class=\"wx-day-temp\">${fmt(d.low)}\u00b0 \/ ${fmt(d.high)}\u00b0<\/div><div class=\"wx-range\" aria-hidden=\"true\"><\/div><small>${d.rain.toFixed(1)} mm rain<\/small><\/article>`).join('')}<\/div><\/section><section class=\"wx-section\" aria-labelledby=\"wx-details\"><h3 id=\"wx-details\">Comfort & daylight<\/h3><div class=\"wx-insights\"><div class=\"wx-insight\"><span class=\"wx-label\">Feels-like guidance<\/span><strong>${feels}<\/strong><span class=\"wx-muted\">Current Hua Hin humidity from the forecast feed.<\/span><\/div><div class=\"wx-insight\"><span class=\"wx-label\">Humidity<\/span><strong>${humidity}<\/strong><span class=\"wx-muted\">Current Hua Hin humidity from the forecast feed.<\/span><\/div><div class=\"wx-insight\"><span class=\"wx-label\">UV guidance<\/span><strong>Strong tropical sun<\/strong><span class=\"wx-muted\">Use shade and sunscreen around midday.<\/span><\/div><div class=\"wx-insight\"><span class=\"wx-label\">Sunrise \/ sunset<\/span><strong>${sunrise} \/ ${sunset}<\/strong><span class=\"wx-muted\">Hua Hin local time (ICT).<\/span><\/div><\/div><\/section><section class=\"wx-section wx-advice\" aria-label=\"Hua Hin practical advice\"><article><h4>Best for getting outdoors<\/h4><p>Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.<\/p><\/article><article><h4>Rain-smart planning<\/h4><p>Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.<\/p><\/article><\/section><p class=\"wx-note\"><strong>About this view:<\/strong> Google WeatherNext guidance, reduced to a small Hua Hin-only dataset and refreshed server-side. Check the <a href=\"https:\/\/www.tmd.go.th\/en\/warning-and-forecast\" target=\"_blank\" rel=\"noopener\">Thai Meteorological Department<\/a> for official warnings.<\/p><\/div>`;\n    const uiLang = pageLang;\n    const translations = {\n      sv: [['Hua Hin weather','V\u00e4der i Hua Hin'],['Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand','Senaste prognosen f\u00f6r Hua Hin, Prachuap Khiri Khan, Thailand'],['Rain next hour','Regn n\u00e4sta timme'],['Wind','Vind'],['Daylight','Dagsljus'],['Outlook range','Prognosintervall'],['Next 24 hours','N\u00e4sta 24 timmar'],['7-day forecast','7-dygnsprognos'],['Tomorrow','I morgon'],['Comfort & daylight','Komfort och dagsljus'],['Feels-like guidance','Upplevd temperatur'],['Humidity','Luftfuktighet'],['UV guidance','UV-r\u00e5d'],['Sunrise \/ sunset','Soluppg\u00e5ng \/ solnedg\u00e5ng'],['Not in compact export','Ing\u00e5r inte i den kompakta exporten'],['Strong tropical sun','Stark tropisk sol'],['Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.','Tidig morgon och sen eftermiddag \u00e4r vanligtvis de behagligaste tiderna f\u00f6r promenader, str\u00e4nder och \u00e4renden.']],\n      de: [['Hua Hin weather','Wetter in Hua Hin'],['Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand','Aktuelle Prognose f\u00fcr Hua Hin, Prachuap Khiri Khan, Thailand'],['Rain next hour','Regen n\u00e4chste Stunde'],['Wind','Wind'],['Daylight','Tageslicht'],['Outlook range','Prognosebereich'],['Next 24 hours','N\u00e4chste 24 Stunden'],['7-day forecast','7-Tage-Prognose'],['Tomorrow','Morgen'],['Comfort & daylight','Komfort und Tageslicht'],['Feels-like guidance','Gef\u00fchlte Temperatur'],['Humidity','Luftfeuchtigkeit'],['UV guidance','UV-Hinweise'],['Sunrise \/ sunset','Sonnenaufgang \/ Sonnenuntergang'],['Not in compact export','Nicht im kompakten Export enthalten'],['Strong tropical sun','Starke tropische Sonne'],['Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.','Fr\u00fcher Morgen und sp\u00e4ter Nachmittag sind normalerweise die angenehmsten Zeiten f\u00fcr Spazierg\u00e4nge, Strandbesuche und Erledigungen.']],\n      ru: [['Hua Hin weather','\u041f\u043e\u0433\u043e\u0434\u0430 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435'],['Latest outlook for Hua Hin, Prachuap Khiri Khan, Thailand','\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u0434\u043b\u044f \u0425\u0443\u0430\u0445\u0438\u043d\u0430, \u041f\u0440\u0430\u0447\u0443\u0430\u043f\u043a\u0445\u0438\u0440\u0438-\u0425\u0430\u043d, \u0422\u0430\u0438\u043b\u0430\u043d\u0434'],['Rain next hour','\u0414\u043e\u0436\u0434\u044c \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0439 \u0447\u0430\u0441'],['Wind','\u0412\u0435\u0442\u0435\u0440'],['Daylight','\u0421\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0434\u0435\u043d\u044c'],['Outlook range','\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430'],['Next 24 hours','\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 24 \u0447\u0430\u0441\u0430'],['7-day forecast','\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0430 7 \u0434\u043d\u0435\u0439'],['Tomorrow','\u0417\u0430\u0432\u0442\u0440\u0430'],['Comfort & daylight','\u041a\u043e\u043c\u0444\u043e\u0440\u0442 \u0438 \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0434\u0435\u043d\u044c'],['Feels-like guidance','\u041e\u0449\u0443\u0449\u0430\u0435\u043c\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430'],['Humidity','\u0412\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c'],['UV guidance','\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0423\u0424'],['Sunrise \/ sunset','\u0412\u043e\u0441\u0445\u043e\u0434 \/ \u0437\u0430\u043a\u0430\u0442'],['Not in compact export','\u041d\u0435\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435'],['Strong tropical sun','\u0421\u0438\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043b\u043d\u0446\u0435'],['Early morning and late afternoon are usually the most comfortable windows for walking, beaches and errands.','\u0420\u0430\u043d\u043d\u0435\u0435 \u0443\u0442\u0440\u043e \u0438 \u043f\u043e\u0437\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0443\u043b\u043e\u043a, \u043f\u043b\u044f\u0436\u0430 \u0438 \u0434\u0435\u043b.']]\n    };\n    const extraTranslations = {\n      sv: [['WeatherNext \u00b7 Hua Hin snapshot','WeatherNext \u00b7 Hua Hin-\u00f6versikt'],['Hot and tropical','Varmt och tropiskt'],['Warm and tropical','Varmt och tropiskt'],['Comfortably warm','Behagligt varmt'],['Feels warmer in the humidity','K\u00e4nns varmare i luftfuktigheten'],['Feels close to the air temperature','K\u00e4nns n\u00e4ra lufttemperaturen'],['Air quality','Luftkvalitet'],['Loading\u2026','Laddar\u2026'],['Humidity','Luftfuktighet'],['Dew point','Daggpunkt'],['Strong tropical sun','Stark tropisk sol'],['Use shade and sunscreen around midday.','Anv\u00e4nd skugga och solskydd mitt p\u00e5 dagen.'],['Hua Hin local time (ICT).','Lokal tid i Hua Hin (ICT).'],['Current Hua Hin humidity from the forecast feed.','Aktuell luftfuktighet i Hua Hin fr\u00e5n prognosfl\u00f6det.'],['Best for getting outdoors','B\u00e4st f\u00f6r utomhusaktiviteter'],['Rain-smart planning','Regnsmart planering'],['Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.','Ha ett flexibelt inomhusalternativ n\u00e4r regnsignalen \u00f6kar. Nederb\u00f6rdsprognosen \u00e4r v\u00e4gledning, inte en officiell varning.'],['About this view:','Om denna vy:'],['Google WeatherNext guidance','Google WeatherNext-v\u00e4gledning']],\n      de: [['WeatherNext \u00b7 Hua Hin snapshot','WeatherNext \u00b7 Hua-Hin-\u00dcbersicht'],['Hot and tropical','Hei\u00df und tropisch'],['Warm and tropical','Warm und tropisch'],['Comfortably warm','Angenehm warm'],['Feels warmer in the humidity','F\u00fchlt sich durch die Luftfeuchtigkeit w\u00e4rmer an'],['Feels close to the air temperature','F\u00fchlt sich \u00e4hnlich wie die Lufttemperatur an'],['Air quality','Luftqualit\u00e4t'],['Loading\u2026','Wird geladen\u2026'],['Humidity','Luftfeuchtigkeit'],['Dew point','Taupunkt'],['Strong tropical sun','Starke tropische Sonne'],['Use shade and sunscreen around midday.','Nutzen Sie um die Mittagszeit Schatten und Sonnenschutz.'],['Hua Hin local time (ICT).','Ortszeit in Hua Hin (ICT).'],['Current Hua Hin humidity from the forecast feed.','Aktuelle Luftfeuchtigkeit in Hua Hin aus dem Prognose-Feed.'],['Best for getting outdoors','Am besten f\u00fcr Aktivit\u00e4ten im Freien'],['Rain-smart planning','Regensmarte Planung'],['Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.','Planen Sie eine flexible Aktivit\u00e4t im Innenbereich, wenn das st\u00fcndliche Regensignal steigt. Die Niederschlagsprognose ist eine Orientierung, keine offizielle Warnung.'],['About this view:','\u00dcber diese Ansicht:'],['Google WeatherNext guidance','Google-WeatherNext-Prognose']],\n      ru: [['WeatherNext \u00b7 Hua Hin snapshot','WeatherNext \u00b7 \u041e\u0431\u0437\u043e\u0440 \u0425\u0443\u0430\u0445\u0438\u043d\u0430'],['Hot and tropical','\u0416\u0430\u0440\u043a\u043e \u0438 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0438'],['Warm and tropical','\u0422\u0435\u043f\u043b\u043e \u0438 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0438'],['Comfortably warm','\u041a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0442\u0435\u043f\u043b\u043e'],['Feels warmer in the humidity','\u0418\u0437-\u0437\u0430 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0449\u0443\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043f\u043b\u0435\u0435'],['Feels close to the air temperature','\u041e\u0449\u0443\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430'],['Air quality','\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430'],['Loading\u2026','\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u2026'],['Humidity','\u0412\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c'],['Dew point','\u0422\u043e\u0447\u043a\u0430 \u0440\u043e\u0441\u044b'],['Strong tropical sun','\u0421\u0438\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043b\u043d\u0446\u0435'],['Use shade and sunscreen around midday.','\u0412 \u043f\u043e\u043b\u0434\u0435\u043d\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0442\u0435\u043d\u044c \u0438 \u0441\u043e\u043b\u043d\u0446\u0435\u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0439 \u043a\u0440\u0435\u043c.'],['Hua Hin local time (ICT).','\u041c\u0435\u0441\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0425\u0443\u0430\u0445\u0438\u043d\u0430 (ICT).'],['Current Hua Hin humidity from the forecast feed.','\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 \u0438\u0437 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430.'],['Best for getting outdoors','\u041b\u0443\u0447\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0443\u043b\u043e\u043a'],['Rain-smart planning','\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0434\u043e\u0436\u0434\u044f'],['Keep a flexible indoor option when the hourly rain signal rises. Forecast precipitation is guidance, not an official warning.','\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043e\u0436\u0434\u044f \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043e\u0441\u0430\u0434\u043a\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u043c, \u0430 \u043d\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c.'],['About this view:','\u041e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0435:'],['Google WeatherNext guidance','\u041f\u0440\u043e\u0433\u043d\u043e\u0437 Google WeatherNext']]\n    };\n    if (extraTranslations[uiLang]) translations[uiLang].push(...extraTranslations[uiLang]);\n    const timeTranslations = {\n      sv: [['Current time in Hua Hin','Aktuell tid i Hua Hin'],['Last updated','Senast uppdaterad'],['Temperature unit','Temperaturenhet'],['Temperature','Temperatur'],['Good','Bra'],['Moderate','M\u00e5ttlig'],['Unhealthy for sensitive groups','Oh\u00e4lsosamt f\u00f6r k\u00e4nsliga grupper'],['Unhealthy','Oh\u00e4lsosamt'],['Very unhealthy','Mycket oh\u00e4lsosamt'],['Unavailable right now','Inte tillg\u00e4ngligt just nu'],['Air quality unavailable','Luftkvalitet inte tillg\u00e4nglig'],['Show earlier hours','Visa tidigare timmar'],['Show later hours','Visa senare timmar'],['mm rain','mm regn'],['Overall AQI','\u00d6vergripande AQI'],['overall US AQI','totalt US AQI'],['PM2.5 AQI','PM2.5-AQI'],['IQAir Hua Hin','IQAir Hua Hin'],['city US AQI','US AQI f\u00f6r staden']],\n      de: [['Current time in Hua Hin','Aktuelle Zeit in Hua Hin'],['Last updated','Zuletzt aktualisiert'],['Temperature unit','Temperatureinheit'],['Temperature','Temperatur'],['Good','Gut'],['Moderate','M\u00e4\u00dfig'],['Unhealthy for sensitive groups','Ungesund f\u00fcr empfindliche Gruppen'],['Unhealthy','Ungesund'],['Very unhealthy','Sehr ungesund'],['Unavailable right now','Derzeit nicht verf\u00fcgbar'],['Air quality unavailable','Luftqualit\u00e4t nicht verf\u00fcgbar'],['Show earlier hours','Fr\u00fchere Stunden anzeigen'],['Show later hours','Sp\u00e4tere Stunden anzeigen'],['mm rain','mm Regen'],['Overall AQI','Gesamter AQI'],['overall US AQI','gesamter US AQI'],['PM2.5 AQI','PM2.5-AQI'],['IQAir Hua Hin','IQAir Hua Hin'],['city US AQI','st\u00e4dtischer US AQI']],\n      ru: [['Current time in Hua Hin','\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435'],['Last updated','\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435'],['Temperature unit','\u0415\u0434\u0438\u043d\u0438\u0446\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b'],['Temperature','\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430'],['Good','\u0425\u043e\u0440\u043e\u0448\u043e'],['Moderate','\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e'],['Unhealthy for sensitive groups','\u0412\u0440\u0435\u0434\u043d\u043e \u0434\u043b\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f'],['Unhealthy','\u0412\u0440\u0435\u0434\u043d\u043e'],['Very unhealthy','\u041e\u0447\u0435\u043d\u044c \u0432\u0440\u0435\u0434\u043d\u043e'],['Unavailable right now','\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e'],['Air quality unavailable','\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e'],['Show earlier hours','\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0447\u0430\u0441\u044b'],['Show later hours','\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0447\u0430\u0441\u044b'],['mm rain','\u043c\u043c \u0434\u043e\u0436\u0434\u044f'],['Overall AQI','\u041e\u0431\u0449\u0438\u0439 AQI'],['overall US AQI','\u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 US AQI'],['PM2.5 AQI','AQI PM2.5'],['IQAir Hua Hin','IQAir \u0425\u0443\u0430\u0445\u0438\u043d'],['city US AQI','\u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0439 US AQI']]\n    };\n    if (timeTranslations[uiLang]) translations[uiLang].push(...timeTranslations[uiLang]);\n    const tr = text => (translations[uiLang] || []).reduce((value, pair) => value.split(pair[0]).join(pair[1]), text);\n    if (translations[uiLang]) {\n      let localized = root.innerHTML;\n      translations[uiLang].forEach(([from,to]) => { localized = localized.split(from).join(to); });\n      root.innerHTML = localized;\n    }\n    const condition = root.querySelector('.wx-condition');\n    if (condition) {\n      const details = document.createElement('div');\n      details.className = 'wx-current-details';\n      details.innerHTML = `<div><span>${tr('Humidity')}<\/span><strong>${humidity}<\/strong><\/div><div><span>${tr('Dew point')}<\/span><strong data-celsius=\"${Number.isFinite(dewPointValue) ? dewPointValue : ''}\">${dewPoint}<\/strong><\/div>`;\n      const aqi = condition.querySelector('.wx-aqi-inline');\n      if (aqi) condition.insertBefore(details, aqi); else condition.append(details);\n    }\n    root.querySelectorAll('.wx-hour').forEach((el,i)=>{\n      if (i === 0) return;\n      const previous = ranges[i - 1];\n      const current = ranges[i];\n      if (dateKey.format(new Date(previous.time)) !== dateKey.format(new Date(current.time))) {\n        el.classList.add('wx-day-divider');\n        const dividerLabel = document.createElement('span');\n        dividerLabel.className = 'wx-day-divider-label';\n        dividerLabel.textContent = dayName.format(new Date(current.time));\n        el.prepend(dividerLabel);\n      }\n    });\n    const eyebrow = root.querySelector('.wx-eyebrow');\n    if (eyebrow) eyebrow.innerHTML = '<img decoding=\"async\" class=\"wx-google-logo\" src=\"https:\/\/www.gstatic.com\/firebasejs\/ui\/2.0.0\/images\/auth\/google.svg\" alt=\"Google\">' + tr('WeatherNext \u00b7 Hua Hin snapshot');\n    const note = root.querySelector('.wx-note');\n    if (note) note.innerHTML = note.innerHTML.replace('Google WeatherNext guidance', 'Google WeatherNext guidance');\n    const title = root.querySelector('#wx-title');\n    if (title) {\n      const titleRow = document.createElement('div');\n      titleRow.className = 'wx-title-row';\n      const date = document.createElement('span');\n      date.className = 'wx-title-date';\n      date.textContent = new Intl.DateTimeFormat(pageLocale, { weekday:'long', day:'numeric', month:'long', year:'numeric', timeZone:'Asia\/Bangkok' }).format(new Date());\n      title.parentNode.insertBefore(titleRow, title);\n      titleRow.append(title, date);\n    }\n    root.querySelectorAll('.wx-day').forEach(el => el.children[2]?.classList.add('wx-day-temp'));\n    const radar = document.createElement('section');\n    radar.className = 'wx-section wx-radar';\n    radar.setAttribute('aria-labelledby', 'wx-radar-title');\n    radar.innerHTML = '<div><img decoding=\"async\" src=\"https:\/\/tiwrmdev.hii.or.th\/TyphoonTracking\/radarImages\/HHN\/HHN_lastest_status.jpg\" alt=\"Latest Hua Hin rain radar image from the Thai Meteorological Department\" loading=\"lazy\" referrerpolicy=\"no-referrer\"><p class=\"wx-muted\">Official Hua Hin radar image supplied by the Thai Meteorological Department. Times are shown in GMT on the source image.<\/p><\/div><div><span class=\"wx-label\">Live rain radar<\/span><h4 id=\"wx-radar-title\">Is rain moving toward Hua Hin?<\/h4><p>Use the radar for the next few hours, alongside the WeatherNext outlook above. Radar is especially useful for fast-moving showers that a forecast model can smooth out.<\/p><a href=\"https:\/\/tiwrmdev.hii.or.th\/DATA\/site\/radar_tmd_1.php?lang=en\" target=\"_blank\" rel=\"noopener\">Open official radar page<\/a><\/div>';\n    const radarImg = radar.querySelector('img');\n    if (radarImg) {\n      const frame = document.createElement('iframe');\n      frame.src = 'https:\/\/weather.tmd.go.th\/hhnLoop.php';\n      frame.title = 'Official Hua Hin radar loop from the Thai Meteorological Department';\n      frame.loading = 'lazy';\n      frame.referrerPolicy = 'no-referrer';\n      frame.style.cssText = 'display:block;width:100%;height:360px;border:0;border-radius:14px;background:#10213e;';\n      radarImg.replaceWith(frame);\n    }\n    const weeklySection = root.querySelector('[aria-labelledby=\"wx-days\"]');\n    if (weeklySection) weeklySection.after(radar);\n    else root.querySelector('.wx-note').before(radar);\n\n    const formatHuaHin = value => new Intl.DateTimeFormat(pageLocale, { weekday:'long', day:'numeric', month:'long', year:'numeric', hour:'2-digit', minute:'2-digit', hour12:false, timeZone:'Asia\/Bangkok' }).format(new Date(value));\n    const currentTime = document.createElement('div');\n    currentTime.className = 'wx-controls';\n    currentTime.innerHTML = '<div class=\"wx-time-meta\"><div>' + tr('Current time in Hua Hin') + ': <strong id=\"wx-current-time\"><\/strong><\/div><div>' + tr('Last updated') + ': <strong>' + formatHuaHin(generatedAt || today.time) + '<\/strong><\/div><\/div><div class=\"wx-unit-toggle\" aria-label=\"' + tr('Temperature unit') + '\"><span class=\"wx-label\" style=\"padding:0 6px\">' + tr('Temperature') + '<\/span><button type=\"button\" class=\"active\" data-unit=\"C\" aria-pressed=\"true\">\u00b0C<\/button><button type=\"button\" data-unit=\"F\" aria-pressed=\"false\">\u00b0F<\/button><\/div>';\n    root.querySelector('.wx-hero').append(currentTime);\n    const updateClock = () => { const el = root.querySelector('#wx-current-time'); if (el) el.textContent = formatHuaHin(Date.now()); };\n    updateClock(); setInterval(updateClock, 60000);\n\n    const strip = root.querySelector('.wx-scroll');\n    const stripWrap = document.createElement('div');\n    stripWrap.className = 'wx-strip-wrap';\n    strip.parentNode.insertBefore(stripWrap, strip);\n    stripWrap.append(strip);\n    const left = document.createElement('button'); left.className='wx-arrow left'; left.type='button'; left.setAttribute('aria-label',tr('Show earlier hours')); left.textContent='\u2039';\n    const right = document.createElement('button'); right.className='wx-arrow right'; right.type='button'; right.setAttribute('aria-label',tr('Show later hours')); right.textContent='\u203a';\n    left.addEventListener('click',()=>strip.scrollBy({left:-420,behavior:'smooth'})); right.addEventListener('click',()=>strip.scrollBy({left:420,behavior:'smooth'}));\n    stripWrap.append(left,right);\n\n    const celsius = value => Number(value);\n    const fahrenheit = value => Number(value) * 9 \/ 5 + 32;\n    root.querySelectorAll('.wx-hour').forEach((el,i)=>{ el.dataset.celsius = ranges[i]?.temp ?? ''; });\n    requestAnimationFrame(() => {\n      const firstUpcoming = nextIndex >= 0 ? nextIndex - rangeStart : 0;\n      const showFrom = strip.children[firstUpcoming]?.offsetLeft || 0;\n      strip.scrollLeft = showFrom;\n      \/\/ A second layout pass avoids browser scroll restoration or the first\n      \/\/ cached render leaving the strip on an earlier card.\n      window.setTimeout(() => { strip.scrollLeft = showFrom; }, 0);\n    });\n    root.querySelectorAll('.wx-day').forEach((el,i)=>{ el.dataset.lowC = days[i]?.low ?? ''; el.dataset.highC = days[i]?.high ?? ''; });\n    const toggleUnits = unit => {\n      root.querySelector('.wx-temp').textContent = fmt(unit === 'F' ? fahrenheit(celsius(today.temp)) : today.temp);\n      root.querySelector('.wx-unit').textContent = `\u00b0${unit}`;\n      root.querySelector('.wx-stat:last-child strong').textContent = `${fmt(unit === 'F' ? fahrenheit(today.low) : today.low)}\u2013${fmt(unit === 'F' ? fahrenheit(today.high) : today.high)}\u00b0`;\n      root.querySelectorAll('.wx-hour').forEach(el=>{ const v=Number(el.dataset.celsius); el.querySelector('strong').textContent=`${fmt(unit === 'F' ? fahrenheit(v) : v)}\u00b0`; });\n      root.querySelectorAll('.wx-day').forEach(el=>{ const low=Number(el.dataset.lowC),high=Number(el.dataset.highC); el.querySelector('.wx-day-temp').textContent=`${fmt(unit === 'F' ? fahrenheit(low) : low)}\u00b0 \/ ${fmt(unit === 'F' ? fahrenheit(high) : high)}\u00b0`; });\n      root.querySelectorAll('.wx-current-details strong[data-celsius]').forEach(el=>{ const v=Number(el.dataset.celsius); el.textContent=Number.isFinite(v) ? `${fmt(unit === 'F' ? fahrenheit(v) : v)}\u00b0${unit}` : 'Unavailable'; });\n      root.querySelectorAll('.wx-unit-toggle button').forEach(btn=>{ const active=btn.dataset.unit===unit; btn.classList.toggle('active',active); btn.setAttribute('aria-pressed',String(active)); });\n    };\n    root.querySelectorAll('.wx-unit-toggle button').forEach(btn=>btn.addEventListener('click',()=>toggleUnits(btn.dataset.unit)));\n\n    fetch('https:\/\/weather.nextstephuahin.com\/air-quality.json', { cache:'no-store' }).then(response => response.ok ? response.json() : Promise.reject(new Error('AQI unavailable'))).then(aqi => {\n      const value = Number(aqi.usAqi);\n      const label = tr(value <= 50 ? 'Good' : value <= 100 ? 'Moderate' : value <= 150 ? 'Unhealthy for sensitive groups' : value <= 200 ? 'Unhealthy' : 'Very unhealthy');\n      const statusClass = value <= 50 ? 'wx-aqi-good' : value <= 100 ? 'wx-aqi-moderate' : 'wx-aqi-unhealthy';\n      const heroAqi = root.querySelector('#wx-hero-aqi');\n      if (heroAqi) {\n        heroAqi.className = Number.isFinite(value) ? `wx-aqi-value ${statusClass}` : 'wx-aqi-value';\n        heroAqi.setAttribute('aria-label', Number.isFinite(value) ? `${tr('Air quality')}: ${Math.round(value)} US AQI, ${label}` : tr('Air quality unavailable'));\n        const pm25Aqi = Number(aqi.pm25Aqi);\n        const iqairAqi = Number(aqi.iqair?.usAqi);\n        const overall = Number.isFinite(value) ? `<div class=\"wx-aqi-primary\"><span>${tr('Overall AQI')}<\/span><strong>${Math.round(value)}<\/strong><em>${label}<\/em><\/div>` : '';\n        const supporting = [];\n        if (Number.isFinite(pm25Aqi)) supporting.push(`<div><span>${tr('PM2.5 AQI')}<\/span><strong>${Math.round(pm25Aqi)}<\/strong><\/div>`);\n        if (Number.isFinite(Number(aqi.pm25))) supporting.push(`<div><span>${tr('PM2.5')}<\/span><strong>${Number(aqi.pm25).toFixed(1)} <small>\u00b5g\/m\u00b3<\/small><\/strong><\/div>`);\n        if (Number.isFinite(iqairAqi)) supporting.push(`<div><span>${tr('IQAir Hua Hin')}<\/span><strong>${Math.round(iqairAqi)} <small>${tr('city US AQI')}<\/small><\/strong><\/div>`);\n        const summary = `${overall}<div class=\"wx-aqi-supporting\">${supporting.join('')}<\/div>`;\n        heroAqi.innerHTML = overall || supporting.length ? summary : tr('Unavailable right now');\n      }\n    }).catch(() => {\n      const heroAqi = root.querySelector('#wx-hero-aqi');\n      if (heroAqi) heroAqi.textContent = tr('Unavailable right now');\n    });\n\n    \/\/ Keep the explanatory\/source card as the final content block, below the forecast,\n    \/\/ radar and practical advice rather than interrupting the primary weather view.\n    const noteCard = root.querySelector('.wx-note');\n    if (noteCard) noteCard.remove();\n  };\n  if (window.nshhWorkerForecast && Array.isArray(window.nshhWorkerForecast.rows)) render(window.nshhWorkerForecast.rows, window.nshhWorkerForecast.generatedAt, window.nshhWorkerForecast.current || {});\n\n  \/\/ Keep an already-open weather page fresh without polling WeatherNext or\n  \/\/ reloading the long-lived WordPress page cache. Only the small Worker JSON\n  \/\/ payload is checked, so this adds no Google\/WeatherNext query cost.\n  let weatherRefreshDue = false;\n  let weatherRefreshTimer;\n  const refreshWeatherView = async () => {\n    if (document.visibilityState !== 'visible') {\n      weatherRefreshDue = true;\n      return;\n    }\n    try {\n      const response = await fetch('https:\/\/weather.nextstephuahin.com\/forecast.json?browser_refresh=' + Date.now(), { cache: 'no-store' });\n      if (!response.ok) return;\n      const latest = await response.json();\n      const current = window.nshhWorkerForecast || {};\n      if (Array.isArray(latest.rows) && (latest.generatedAt !== current.generatedAt || latest.sourceInitTime !== current.sourceInitTime)) {\n        window.nshhWorkerForecast = latest;\n        render(latest.rows, latest.generatedAt, latest.current || {});\n      }\n    } catch (_) {\n      \/\/ Keep the last good forecast visible if a background refresh fails.\n    }\n    weatherRefreshDue = false;\n  };\n  const scheduleWeatherRefresh = () => {\n    window.clearTimeout(weatherRefreshTimer);\n    weatherRefreshTimer = window.setTimeout(async () => {\n      await refreshWeatherView();\n      scheduleWeatherRefresh();\n    }, 30 * 60 * 1000);\n  };\n  \/\/ Replace any long-lived WordPress page-cache snapshot immediately with\n  \/\/ the current Worker payload, then continue with the background schedule.\n  refreshWeatherView();\n  scheduleWeatherRefresh();\n  document.addEventListener('visibilitychange', () => {\n    if (weatherRefreshDue && document.visibilityState === 'visible') {\n      refreshWeatherView();\n    }\n  });\n})();\n\n<\/script>\n<script data-no-optimize=\"1\">\n(() => {\n  const lang = (document.documentElement.lang || \"en\").toLowerCase().split(\"-\")[0];\n  const copy = {\n    sv: { alt:\"Senaste regnradarbilden f\u00f6r Hua Hin fr\u00e5n Thailands meteorologiska institut\", caption:\"Officiell radarbild f\u00f6r Hua Hin fr\u00e5n Thailands meteorologiska institut. Tiderna p\u00e5 k\u00e4llbilden visas i GMT.\", label:\"Live-regnradar\", title:\"R\u00f6r sig regn mot Hua Hin?\", body:\"Anv\u00e4nd radarn f\u00f6r de n\u00e4rmaste timmarna tillsammans med WeatherNext-prognosen ovan. Radarn \u00e4r s\u00e4rskilt anv\u00e4ndbar f\u00f6r snabba skurar som en prognosmodell kan j\u00e4mna ut.\", link:\"\u00d6ppna officiell radarsida\", linkLang:\"sv\" },\n    de: { alt:\"Aktuelles Hua-Hin-Regenradarbild des thail\u00e4ndischen Wetterdienstes\", caption:\"Offizielles Radarbild f\u00fcr Hua Hin, bereitgestellt vom thail\u00e4ndischen Wetterdienst. Die Zeiten im Quellbild sind in GMT angegeben.\", label:\"Live-Regenradar\", title:\"Zieht Regen auf Hua Hin zu?\", body:\"Nutzen Sie das Radar f\u00fcr die n\u00e4chsten Stunden zusammen mit der WeatherNext-Prognose oben. Das Radar ist besonders hilfreich bei schnell ziehenden Schauern, die ein Vorhersagemodell gl\u00e4tten kann.\", link:\"Offizielle Radarseite \u00f6ffnen\", linkLang:\"de\" },\n    ru: { alt:\"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0430\u0440\u0430 \u0434\u043e\u0436\u0434\u044f \u043d\u0430\u0434 \u0425\u0443\u0430\u0445\u0438\u043d\u043e\u043c \u043e\u0442 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u044b \u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0430\", caption:\"\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0434\u0438\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0425\u0443\u0430\u0445\u0438\u043d\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439 \u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0430. \u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e \u0413\u0440\u0438\u043d\u0432\u0438\u0447\u0443.\", label:\"\u0420\u0430\u0434\u0430\u0440 \u0434\u043e\u0436\u0434\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\", title:\"\u0414\u043e\u0436\u0434\u044c \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0425\u0443\u0430\u0445\u0438\u043d\u0430?\", body:\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0440\u0430\u0434\u0430\u0440 \u043d\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0447\u0430\u0441\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u043e\u043c WeatherNext \u0432\u044b\u0448\u0435. \u0420\u0430\u0434\u0430\u0440 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043b\u0438\u0432\u043d\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c.\", link:\"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0430\u0434\u0430\u0440\u0430\", linkLang:\"ru\" }\n  }[lang];\n  if (!copy) return;\n  const radar = document.querySelector(\".wx-radar\");\n  if (!radar) return;\n  const title = radar.querySelector(\"#wx-radar-title\");\n  const label = radar.querySelector(\".wx-label\");\n  const body = radar.querySelector(\"h4 + p\");\n  const caption = radar.querySelector(\".wx-muted\");\n  const link = radar.querySelector(\"a\");\n  const image = radar.querySelector(\"img\");\n  if (title) title.textContent = copy.title;\n  if (label) label.textContent = copy.label;\n  if (body) body.textContent = copy.body;\n  if (caption) caption.textContent = copy.caption;\n  if (link) { link.textContent = copy.link; link.href = \"https:\/\/tiwrmdev.hii.or.th\/DATA\/site\/radar_tmd_1.php?lang=\" + copy.linkLang; }\n  if (image) image.alt = copy.alt;\n  const frame = radar.querySelector(\"iframe\");\n  if (frame) frame.title = copy.title;\n})();\n<\/script>\n\n<section class=\"hhsg-sec\"><h2>\u0414\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0433\u0438\u0434\u044b \u043f\u043e \u0425\u0443\u0430\u0445\u0438\u043d\u0443<\/h2><div class=\"hhsg-cards\"><article class=\"hhsg-card\"><h3><a href=\"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/\">\u041f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0425\u0443\u0430\u0445\u0438\u043d\u0443<\/a><\/h3><p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u0435\u0441\u0442\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430, \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0438 \u043e\u0442\u0434\u044b\u0445\u0430 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435.<\/p><\/article><article class=\"hhsg-card\"><h3><a href=\"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/zdravookhranenie-v-khuakhine\/ekstrennye-kontakty-v-huakhine\/\">\u042d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b<\/a><\/h3><p>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u043d\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p><\/article><article class=\"hhsg-card\"><h3><a href=\"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/pogoda-v-tailande-po-mesyatsam\/\">\u041f\u043e\u0433\u043e\u0434\u0430 \u043f\u043e \u043c\u0435\u0441\u044f\u0446\u0430\u043c<\/a><\/h3><p>\u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u0434\u0435\u043b\u0430 \u0438 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u0437\u043e\u0440\u043e\u043c \u0441\u0435\u0437\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0433\u043e\u0434\u044b.<\/p><\/article><\/div><\/section><section class=\"hhsg-faq\"><h2>\u041e \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0435 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435<\/h2><details><summary>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 WeatherNext?<\/summary><p>WeatherNext \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043f\u043e\u0433\u043e\u0434\u044b Google. \u042d\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0437\u043e\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0441\u0447\u0451\u0442 \u043c\u043e\u0434\u0435\u043b\u0438. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u0447\u0451\u0442\u043d\u0443\u044e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0441\u0442\u044c.<\/p><\/details><details><summary>\u042d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f?<\/summary><p>\u041d\u0435\u0442. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. \u0421\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u041c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u043f\u0430\u0440\u0442\u0430\u043c\u0435\u043d\u0442\u0430 \u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0430 \u0438 \u043c\u0435\u0441\u0442\u043d\u044b\u0445 \u0432\u043b\u0430\u0441\u0442\u0435\u0439. <a href=\"https:\/\/www.tmd.go.th\/en\/warning-and-forecast\" target=\"_blank\" rel=\"noopener\">Thai Meteorological Department<\/a><\/p><\/details><\/section><\/div>","protected":false},"excerpt":{"rendered":"<p>\u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u043d\u0438 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u043e\u043c WeatherNext: \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u043d\u043e\u0437, \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0430 7 \u0434\u043d\u0435\u0439, \u0440\u0430\u0434\u0430\u0440 \u0434\u043e\u0436\u0434\u044f, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u043c\u0435\u0441\u0442\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":6025,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8938","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 - Next Step Hua Hin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/\" \/>\n<meta property=\"og:locale\" content=\"ru_RU\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 - Next Step Hua Hin\" \/>\n<meta property=\"og:description\" content=\"\u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u043d\u0438 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u043e\u043c WeatherNext: \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u043d\u043e\u0437, \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0430 7 \u0434\u043d\u0435\u0439, \u0440\u0430\u0434\u0430\u0440 \u0434\u043e\u0436\u0434\u044f, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u043c\u0435\u0441\u0442\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/\" \/>\n<meta property=\"og:site_name\" content=\"Next Step Hua Hin\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/nextstephuahin\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-08T16:01:26+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/putevoditel-po-vyzhivaniyu-v-khuakhine\\\/prognoz-pogody-v-khuakhine\\\/\",\"url\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/putevoditel-po-vyzhivaniyu-v-khuakhine\\\/prognoz-pogody-v-khuakhine\\\/\",\"name\":\"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 - Next Step Hua Hin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/#website\"},\"datePublished\":\"2026-10-03T09:35:38+00:00\",\"dateModified\":\"2026-10-08T16:01:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/putevoditel-po-vyzhivaniyu-v-khuakhine\\\/prognoz-pogody-v-khuakhine\\\/#breadcrumb\"},\"inLanguage\":\"ru-RU\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/putevoditel-po-vyzhivaniyu-v-khuakhine\\\/prognoz-pogody-v-khuakhine\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/putevoditel-po-vyzhivaniyu-v-khuakhine\\\/prognoz-pogody-v-khuakhine\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/glavnaya\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u041f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0436\u0438\u0437\u043d\u0438 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435\",\"item\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/putevoditel-po-vyzhivaniyu-v-khuakhine\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/#website\",\"url\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/\",\"name\":\"Visa Agent Hua Hin | Thai Visa Services \u2013 Next Step Hua Hin\",\"description\":\"Visa, Immigration &amp; Expat Services in Hua Hin\",\"publisher\":{\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ru-RU\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/#organization\",\"name\":\"Next Step Hua Hin\",\"url\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ru-RU\",\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/nextstephuahin.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/PHOTO-2026-08-10-09-05-57.jpg\",\"contentUrl\":\"https:\\\/\\\/nextstephuahin.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/PHOTO-2026-08-10-09-05-57.jpg\",\"width\":152,\"height\":139,\"caption\":\"Next Step Hua Hin\"},\"image\":{\"@id\":\"https:\\\/\\\/nextstephuahin.com\\\/ru\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/nextstephuahin\\\/\",\"https:\\\/\\\/www.instagram.com\\\/nextstephuahin\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 - Next Step Hua Hin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/","og_locale":"ru_RU","og_type":"article","og_title":"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 - Next Step Hua Hin","og_description":"\u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u043d\u0438 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u043e\u043c WeatherNext: \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u043d\u043e\u0437, \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0430 7 \u0434\u043d\u0435\u0439, \u0440\u0430\u0434\u0430\u0440 \u0434\u043e\u0436\u0434\u044f, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u043c\u0435\u0441\u0442\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.","og_url":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/","og_site_name":"Next Step Hua Hin","article_publisher":"https:\/\/www.facebook.com\/nextstephuahin\/","article_modified_time":"2026-10-08T16:01:26+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/","url":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/","name":"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435 - Next Step Hua Hin","isPartOf":{"@id":"https:\/\/nextstephuahin.com\/ru\/#website"},"datePublished":"2026-10-03T09:35:38+00:00","dateModified":"2026-10-08T16:01:26+00:00","breadcrumb":{"@id":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/#breadcrumb"},"inLanguage":"ru-RU","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/prognoz-pogody-v-khuakhine\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nextstephuahin.com\/ru\/glavnaya\/"},{"@type":"ListItem","position":2,"name":"\u041f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0436\u0438\u0437\u043d\u0438 \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435","item":"https:\/\/nextstephuahin.com\/ru\/putevoditel-po-vyzhivaniyu-v-khuakhine\/"},{"@type":"ListItem","position":3,"name":"\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u0425\u0443\u0430\u0445\u0438\u043d\u0435"}]},{"@type":"WebSite","@id":"https:\/\/nextstephuahin.com\/ru\/#website","url":"https:\/\/nextstephuahin.com\/ru\/","name":"Visa Agent Hua Hin | Thai Visa Services \u2013 Next Step Hua Hin","description":"Visa, Immigration &amp; Expat Services in Hua Hin","publisher":{"@id":"https:\/\/nextstephuahin.com\/ru\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nextstephuahin.com\/ru\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ru-RU"},{"@type":"Organization","@id":"https:\/\/nextstephuahin.com\/ru\/#organization","name":"Next Step Hua Hin","url":"https:\/\/nextstephuahin.com\/ru\/","logo":{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https:\/\/nextstephuahin.com\/ru\/#\/schema\/logo\/image\/","url":"https:\/\/nextstephuahin.com\/wp-content\/uploads\/2026\/08\/PHOTO-2026-08-10-09-05-57.jpg","contentUrl":"https:\/\/nextstephuahin.com\/wp-content\/uploads\/2026\/08\/PHOTO-2026-08-10-09-05-57.jpg","width":152,"height":139,"caption":"Next Step Hua Hin"},"image":{"@id":"https:\/\/nextstephuahin.com\/ru\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/nextstephuahin\/","https:\/\/www.instagram.com\/nextstephuahin"]}]}},"_links":{"self":[{"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/pages\/8938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/comments?post=8938"}],"version-history":[{"count":6,"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/pages\/8938\/revisions"}],"predecessor-version":[{"id":9806,"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/pages\/8938\/revisions\/9806"}],"up":[{"embeddable":true,"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/pages\/6025"}],"wp:attachment":[{"href":"https:\/\/nextstephuahin.com\/ru\/wp-json\/wp\/v2\/media?parent=8938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}